Как создать условие между 3 связанными таблицами - PullRequest
0 голосов
/ 23 мая 2018

Начинающий с sql, я работаю над laravel и хочу изменить значения таблицы, к которой подключен подключенный пользователь
У меня есть 3 таблицы:
Внешний ключ пользователя (id) в экзаменах (user_id)
и
Экзамены (id) внешнего ключа при проверке (exam_id)
Как изменить проверки только подключенного пользователя?он делает это сам, так что я думаю, что нам понадобится

 Auth::user()
    DB::table('verifications')->where([
    ['confirmation', 'non'],
    ['modifier', 'oui'],
    ])->update(['confirmation' => "oui"]);

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Если вы не используете отношения laravel, используйте Joins.

DB::table('verifications')
    ->leftJoin('exams', 'verification.exam_id', '=', 'exams.id')
    ->leftJoin('users', 'exams.user_id', '=', 'user.id')
    ->where([
        ['verifications.confirmation', 'non'],
        ['verifications.modifier', 'oui'],
        ['users.id', Auth::user()->id]
    ])
    ->update(['verificationsconfirmation' => "oui"]);
0 голосов
/ 23 мая 2018

Вы, похоже, получаете идентификатор экзамена, поэтому добавьте его в запрос на обновление: попробуйте, как показано ниже:

DB::table('verifications')->with($exams)->->whereIn('exam_id', $exams->pluck('id') )->where([ ['confirmation', 'non'], ['modifier', 'oui'], ])->update(['confirmation' => "oui"]);

Обновление Ответ: у вас уже есть переменная "$ exams", и вам не нужноприсоединиться к любому столу далее: Попробуйте это:

DB::table('verifications')->whereIn('verification.exam_id', $exams->pluck('id') )->where([ ['confirmation', 'non'], ['modifier', 'oui'], ])->update(['confirmation' => "oui"]);
0 голосов
/ 23 мая 2018

Вам нужно выяснить существование отношений.Но сначала у вас должны быть отношения между моделями.

Пример:

Если вам нужна еще большая мощность, вы можете использовать методы whereHas и orWhereHas для установки условий "где" в ваших запросах has.Эти методы позволяют добавлять настраиваемые ограничения в ограничение отношений, например, проверять содержимое комментария:

// Retrieve all posts with at least one comment containing words like foo%
$posts = App\Post::whereHas('comments', function ($query) {
    $query->where('content', 'like', 'foo%');
})->get();

Подробнее: https://laravel.com/docs/5.6/eloquent-relationships#querying-relationship-existence

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...