У меня есть 2 таблицы: USERS
а также SUBJECTS
Отношение между USER
а также SUBJECT
это много ко многим.
В моделях User.php и Subject.php я определил:
User.php
function subjects() { return $this->belongsToMany('App\User'); }
Subject.php
function users() { return $this->belongsToMany('App\Subject'); }
Сводная таблица subject_user
и имеет 3 столбца:
subject_id
, user_id
, finished
finished
значение может быть только между 0 и 1.
Теперь я знаю, что когда я хочу выбрать все предметы, которые изучал пользователь, я должен написать $user->subjects
,
Но что, если я хочу выбрать все предметы, которые изучал пользователь, и конечное значение в сводной таблице равно 1?
Вам необходимо добавить «withPivot ()» в определения отношений, например:
function subjects() { return $this->belongsToMany('App\User')->withPivot('finished'); }
function users() { return $this->belongsToMany('App\Subject')->withPivot('finished'); }
Тогда вы можете сделать:
$user->subjects()->where('finished', 1)->get();
Вам нужно будет загрузить эти отношения и использовать wherePivot
метод.
$user = User::with(['subjects' => function($q) {
$q->wherePivot('finished', 1);
}])->fine($user_id);