我要设置条件,如果教师已经存在于数据库中,则更新记录,如果id不存在,则在数据库中添加记录。如何在laravel中使用Ajax实现它?
Update.js:
jQuery(document).ready(function($) {
$('#update-data').on('click',function(){
alert("ok");
$.ajax({
type: "POST",
url: "teachers/" + $('#update-data').attr("value"),
dataType: 'json',
headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
data : $(this).serialize(),
beforeSend: function() {
},
success: function (data) {
alert("ok");
},
});
});
});
Store.Js:
jQuery(document).ready(function($) {
$("#add-data").submit(function (e) {
$.ajax({
type: "POST",
url: "teachers",
dataType: 'json',
headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') },
data: $(this).serialize(),
success: function (data) {
alert("Added");
data.responseJSON;
refreshTable();
},
});
});
});
更新控制器:
public function update(TeacherRequest $request, $id)
{
$teacher = Teacher::find($id);
if($teacher->save()){
return response()->json([
'status' => 'success',
'msg' => 'esecond has been updated'
]);
}
}
商店控制器:
public function store(Request $request)
{
$teacher = new Teacher;
$teacher=teacher::create($request);
}
答案 0 :(得分:1)
有一个自定义方法
$teacher = Teacher::firstOrCreate($id, [
// Pass data here
]);
如果要手动检查并将请求遍历到另一种方法
public function update(TeacherRequest $request, $id)
{
$teacher = Teacher::find($id);
if (is_null($teacher)) { // If model not found, pass request to store method
$this->store($request);
}
if($teacher->save()){
return response()->json([
'status' => 'success',
'msg' => 'esecond has been updated'
]);
}
}
从docs
希望这会有所帮助
答案 1 :(得分:0)
口才提供了一种updateOrCreate
方法,因此您可以更新或创建记录。
$teacher = Teacher::updateOrCreate([
// attributes to search for
'name' => 'Test Teacher',
], [
// values
'grade' => 6,
]);
这将找到名称为“ Test Teacher”的老师,并将成绩更新为6,或创建一个名称为“ Test Teacher”的新老师,并将成绩设置为6。
“您也可能遇到想要更新现有模型或创建新模型(如果不存在的情况)的情况。Laravel提供了一种
updateOrCreate
方法来一步一步完成。就像firstOrCreate
方法,updateOrCreate
保留了模型...”-Laravel 6.0 Docs - Eloquent - Other Creation Methods - updateOrCreate