如何在Laravel中检查双向唯一记录?

时间:2019-04-22 11:27:42

标签: php laravel

我不确定这将如何工作,但是我经常遇到这个问题。如果只有一个主键,我可以使用它,但是有两个必须唯一。

在创建新记录之前,我必须每次检查,是否有Laravel魔术可以用来在幕后检查是否已经存在类似的东西?

我不确定Laravel提供的双向主键是什么,我真的不知道他们的文档中要寻找什么,但想知道是否有帮助?

if (CourseEntry::where('course_id', $course->id)->where('user_id', Auth::user()->id)->count() < 1) {
    CourseEntry::create([
        'course_id' => $course->id,
        'user_id' => Auth::user()->id,
        'last_interaction' => Carbon::now(),
        'started_at' => Carbon::now()
    ]);
}

我在User.php中有一段恋情可能会有所帮助?

public function courseEntries() {
    return $this->hasMany('App\Models\CourseEntry');
}

1 个答案:

答案 0 :(得分:2)

取决于您想要对结果做些什么,因为我可以根据希望通过特定课程来更新用户最后一次交互的列来猜测,您可以实现以下目标:

$courseEntry = CourseEntry::firstOrNew([ 
        'course_id' => $course->id,
        'user_id' => Auth::user()->id 
    ],
    [
        'started_at' => Carbon::now() // this should be set just the first time, when the user entry does not exists
    ]);

$courseEntry->last_interaction = Carbon::now(); // this should be updated each time.
$courseEntry->save();