Php 如果不存在,则插入新记录,如果存在,则更新,laravel 5.4

Php 如果不存在,则插入新记录,如果存在,则更新,laravel 5.4,php,laravel-5,Php,Laravel 5,如果不存在新记录,是否有方法插入新记录,如果存在,是否有方法更新记录?下面是我使用的代码 public function store(Request $request) { $inputs = $request->all(); $this->validate($request,[ 'course_code'=>'required' ]); $batch = $request->batch; $stud

如果不存在新记录,是否有方法插入新记录,如果存在,是否有方法更新记录?下面是我使用的代码

public function store(Request $request)
{
    $inputs = $request->all();
    $this->validate($request,[
            'course_code'=>'required'
        ]);
    $batch = $request->batch;
    $students = User::select('student_id')->where('batch', $batch)->get();

    $course_codes = $inputs['course_code'];
    $data=[];
    foreach ($students as $student) {
        foreach ($course_codes as $course_code) {
        $data[]=[
            'batch' => $batch,
            'student_id' => $student->student_id,
            'semester' => $inputs['semester'],
            'course_code' => $course_code,
            "created_at" =>  \Carbon\Carbon::now(), # \Datetime()
            "updated_at" => \Carbon\Carbon::now()  # \Datetime()
            ]; 
        }
    }    

    DB::table('assign_batches')->insert($data);
    return redirect('/admin/assign/batch/create')->with('message', 'A batch has been assigned to courses successfully!');
}
这是我再次插入相同记录时的输出。 但我希望一个学生Id可以有许多课程代码,但不能重复。所以我想检查学生是否有相同的课程,然后跳过或更新,并插入新的记录。 请帮帮我。
谢谢。

检查
id
如果存在,则更新,否则插入

 if(isset($request->id)){
    DB::table('assign_batches')->where("id", $request->id)->update($data);
 }else {
    DB::table('assign_batches')->insert($data);
 }
使用


例如,如果您有一个表,供每个用户投票一次或更新其投票

//give the record to use

    $record = request('vote');
    //checkif there is a record for user in model
    $row = Uservoting::where('user_id',Auth->user()->id)->first;
    //if true
    if($row!==null){
        //update
        $row::update(['vote' => $record]);
        //if there isn't in model
    }else{
        //create a new row and insert the value
        $new_row = new Uservoting();
        $new_row->user_id = Auth->user()->id ;
        $new_row->vote = $record ;
        $new_row->vote();`

    }

希望这项工作:{--如果您发现任何错误,请告诉我--}}

您也可以使用sql查询:$sql=“插入到{$\u table}({$\u columns})值{$\u VALUES}上的重复键更新{$updates}”;语句($sql);谢谢你的回答。事实上,我想检查一个表行中是否存在两条记录(学生id和课程代码)。请您澄清一下好吗?为在laravel模板视图中唯一的
id
设置一个隐藏输入,并根据给出的答案进行检查。我认为无需使用
course\u code
使用
$isDuplicate=DB::table('assign\u batches')->where('student\u id',$student->student\u id)->where('course\u code',$course\u code)检查
->count()
然后检查
$isDuplicate>0
是否更新,否则插入。什么是foo。完全解释。@SumitKumarGupta
foo
只是与firstOrNew无关的另一列
//give the record to use

    $record = request('vote');
    //checkif there is a record for user in model
    $row = Uservoting::where('user_id',Auth->user()->id)->first;
    //if true
    if($row!==null){
        //update
        $row::update(['vote' => $record]);
        //if there isn't in model
    }else{
        //create a new row and insert the value
        $new_row = new Uservoting();
        $new_row->user_id = Auth->user()->id ;
        $new_row->vote = $record ;
        $new_row->vote();`

    }