Laravel如果id存在则更新记录

时间:2019-10-06 22:53:31

标签: ajax laravel

我要设置条件,如果教师已经存在于数据库中,则更新记录,如果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);
}

2 个答案:

答案 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