Как проверить двухстороннюю уникальную запись в Laravel? - PullRequest
2 голосов
/ 22 апреля 2019

Я не уверен, как это будет работать, но я часто сталкиваюсь с этой проблемой.Если бы был только один первичный ключ, я мог бы работать с этим, но есть два, которые должны быть уникальными.

Я должен проверять каждый раз, прежде чем создавать новую запись, нет ли магии 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 Ответ

2 голосов
/ 22 апреля 2019

Зависит от того, что вы хотите сделать с результатом, как я могу догадаться, исходя из столбцов, которые вы хотели бы обновить при последнем взаимодействии пользователя с конкретным курсом, вы можете достичь этого следующим образом:

$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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...