Laravel更新mysql表返回空数据
Posted
技术标签:
【中文标题】Laravel更新mysql表返回空数据【英文标题】:Laravel update mysql table return empty data 【发布时间】:2019-06-14 00:34:47 【问题描述】:我正在开发一个应用程序,我使用 laravel 和数据表从 mysql 表中显示/编辑/删除数据。尝试在 Mysql 表中添加或编辑数据并更新数据时出现此错误:
代码如下:
<!DOCTYPE html>
<html>
<head>
<title>Datatables Server Side Processing in Laravel</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
<script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.10.12/js/dataTables.bootstrap.min.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.12/css/dataTables.bootstrap.min.css" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<br />
<h3 align="center">Datatables Server Side Processing in Laravel</h3>
<br />
<div align="right">
<button type="button" name="add" id="add_data" class="btn btn-success btn-sm">Add</button>
</div>
<br />
<table id="student_table" class="table table-bordered" style="width:100%">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Action</th>
<th><button type="button" name="bulk_delete" id="bulk_delete" class="btn btn-danger btn-xs"><i class="glyphicon glyphicon-remove"></i></button></th>
</tr>
</thead>
</table>
</div>
<div id="studentModal" class="modal fade" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" id="student_form">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Add Data</h4>
</div>
<div class="modal-body">
<input type="hidden" name="_token" value=" csrf_token() ">
<span id="form_output"></span>
<div class="form-group">
<label>Enter First Name</label>
<input type="text" name="first_name" id="first_name" class="form-control" />
</div>
<div class="form-group">
<label>Enter Last Name</label>
<input type="text" name="last_name" id="last_name" class="form-control" />
</div>
</div>
<div class="modal-footer">
<input type="hidden" name="student_id" id="student_id" value="" />
<input type="hidden" name="button_action" id="button_action" value="insert" />
<input type="submit" name="submit" id="action" value="Add" class="btn btn-info" />
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</form>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function()
$('#student_table').DataTable(
"processing": true,
"serverSide": true,
"ajax": " route('ajaxdata.getdata') ",
"columns":[
"data": "first_name" ,
"data": "last_name" ,
"data": "action", orderable:false, searchable: false,
"data":"checkbox", orderable:false, searchable:false
]
);
$('#add_data').click(function()
$('#studentModal').modal('show');
$('#student_form')[0].reset();
$('#form_output').html('');
$('#button_action').val('insert');
$('#action').val('Add');
$('.modal-title').text('Add Data');
);
$('#student_form').on('submit', function(event)
event.preventDefault();
var form_data = $(this).serialize();
$.ajax(
url:" route('ajaxdata.postdata') ",
method:"POST",
data:form_data,
dataType:"json",
success:function(data)
if(data.error.length > 0)
var error_html = '';
for(var count = 0; count < data.error.length; count++)
error_html += '<div class="alert alert-danger">'+data.error[count]+'</div>';
$('#form_output').html(error_html);
else
$('#form_output').html(data.success);
$('#student_form')[0].reset();
$('#action').val('Add');
$('.modal-title').text('Add Data');
$('#button_action').val('insert');
$('#student_table').DataTable().ajax.reload();
)
);
$(document).on('click', '.edit', function()
var id = $(this).attr("id");
$('#form_output').html('');
$.ajax(
url:"route('ajaxdata.fetchdata')",
method:'get',
data:id:id,
dataType:'json',
success:function(data)
$('#first_name').val(data.first_name);
$('#last_name').val(data.last_name);
$('#student_id').val(id);
$('#studentModal').modal('show');
$('#action').val('Edit');
$('.modal-title').text('Edit Data');
$('#button_action').val('update');
)
);
$(document).on('click', '.delete', function()
var id = $(this).attr('id');
if(confirm("Are you sure you want to Delete this data?"))
$.ajax(
url:"route('ajaxdata.removedata')",
mehtod:"get",
data:id:id,
success:function(data)
alert(data);
$('#student_table').DataTable().ajax.reload();
)
else
return false;
);
$(document).on('click', '#bulk_delete', function()
var id = [];
if(confirm("Are you sure you want to Delete this data?"))
$('.student_checkbox:checked').each(function()
id.push($(this).val());
);
if(id.length > 0)
$.ajax(
url:" route('ajaxdata.mas-s-remove')",
method:"get",
data:id:id,
success:function(data)
alert(data);
$('#student_table').DataTable().ajax.reload();
);
else
alert("Please select atleast one checkbox");
);
);
</script>
</body>
</html>
控制器:
<?php
namespace App\Http\Controllers;
use Validator;
use Illuminate\Http\Request;
use App\Student;
use Yajra\DataTables\DataTables;
class AjaxdataController extends Controller
function index()
return view('student.ajaxdata');
//http://127.0.0:8000/ajaxdata
function getdata()
$students = Student::select('id', 'first_name', 'last_name');
return DataTables::of($students)
->addColumn('action', function($student)
return '<a href="#" class="btn btn-xs btn-primary edit" id="'.$student->id.'"><i class="glyphicon glyphicon-edit"></i> Edit</a><a href="#" class="btn btn-xs btn-danger delete" id="'.$student->id.'"><i class="glyphicon glyphicon-remove"></i> Delete</a>';
)
->addColumn('checkbox', '<input type="checkbox" name="student_checkbox[]" class="student_checkbox" value="$id" />')
->rawColumns(['checkbox','action'])
->make(true);
function postdata(Request $request)
$validation = Validator::make($request->all(), [
'first_name' => 'required',
'last_name' => 'required',
]);
$error_array = array();
$success_output = '';
if ($validation->fails())
foreach($validation->messages()->getMessages() as $field_name => $messages)
$error_array[] = $messages;
else
if($request->get('button_action') == "insert")
$student = new Student([
'first_name' => $request->get('first_name'),
'last_name' => $request->get('last_name')
]);
$student->save();
$success_output = '<div class="alert alert-success">Data Inserted</div>';
if($request->get('button_action') == 'update')
$student = Student::find($request->get('student_id'));
$student->first_name = $request->get('first_name');
$student->last_name = $request->get('last_name');
$student->save();
$success_output = '<div class="alert alert-success">Data Updated</div>';
$output = array(
'error' => $error_array,
'success' => $success_output
);
echo json_encode($output);
function fetchdata(Request $request)
$id = $request->input('id');
$student = Student::find($id);
$output = array(
'first_name' => $student->first_name,
'last_name' => $student->last_name
);
echo json_encode($output);
function removedata(Request $request)
$student = Student::find($request->input('id'));
if($student->delete())
echo 'Data Deleted';
function mas-s-remove(Request $request)
$student_id_array = $request->input('id');
$student = Student::whereIn('id', $student_id_array);
if($student->delete())
echo 'Data Deleted';
web.php:
Route::get('ajaxdata', 'AjaxdataController@index')->name('ajaxdata');
Route::get('ajaxdata/getdata', 'AjaxdataController@getdata')->name('ajaxdata.getdata');
Route::post('ajaxdata/postdata', 'AjaxdataController@postdata')->name('ajaxdata.postdata');
Route::get('ajaxdata/fetchdata', 'AjaxdataController@fetchdata')->name('ajaxdata.fetchdata');
Route::get('ajaxdata/removedata', 'AjaxdataController@removedata')->name('ajaxdata.removedata');
Route::get('ajaxdata/mas-s-remove', 'AjaxdataController@mas-s-remove')->name('ajaxdata.mas-s-remove');
只有删除有效。我也想使用数据表的select-checkbox
属性,但它不起作用,就像这个link 用于选择时的线条颜色但有多个选择。
【问题讨论】:
需要在ajax请求中传递CSRF令牌吗? _token: " csrf_token() " ? 是的,我需要这样做。 Laravel 是 RESTFul 框架,用于更新使用或使用 PUT 方法提交数据,如果您使用 jquery ajax set 方法 PUT 提交表单。也使用 URL postdata/id of record 出现同样的错误。 你能在JSFile中显示你的更新函数吗? 【参考方案1】:感谢@Alaksandar Jesus Gene,我通过将get
请求更改get
请求解决了这个问题,该请求在web.php 文件和视图相关的脚本代码中对postdata
函数进行。现在它起作用了,我的第二个问题仍未解决。
【讨论】:
【参考方案2】:你可以试试这个
$(document).on('click', '.edit', function ()
data = ;
data.id = $(this).attr("id");
data.first_name = "User"; //$('#first_name').val();
data.last_name = "hello"; //$('#last_name').val();
data.student_id = $(this).attr("id");
data.action = 'Edit';
data.button_action = 'update';
$('#form_output').html('');
$.ajax(
url: "route('ajaxdata.fetchdata')",
method: 'post',
data: data,
dataType: 'json',
success: function (data)
// $('#studentModal').modal('show');
// $('.modal-title').text('Edit Data');
console.log("data", data);
,
error: function(err)
console.log("err", err);
)
);
Route::post('ajaxdata/postdata', 'AjaxdataController@postdata')->name('ajaxdata.postdata');
路由器需要发布请求,但您正在发送 GET 请求。请按图示更改方法
【讨论】:
谢谢,这就是问题所在。你能更新你的答案以便我批准吗? 出了什么问题?如果你已经解决了,请告诉我,因为我已经更新了我的答案 我已经更新了我的答案。请将其标记为正确,因为这是我们经常犯的错误,并且对其他人有用。 我在这里有一个困惑......你正在映射到 url:“route('ajaxdata.fetchdata')”,它指向 GET 请求。但是 url 是 url:"route('ajaxdata.postdata')",我不知道,可能是你发布了更新的代码。 但这不是我的意思,您已经删除了包含正确答案的评论。以上是关于Laravel更新mysql表返回空数据的主要内容,如果未能解决你的问题,请参考以下文章