Я выбираю все ScheduledPrograms
из определенного диапазона данных, который имеет Attendees
, принадлежащих определенному User
. Я хочу добавить фильтр, чтобы выбрать только SchduledPrograms
где поворотное поле registered=1
Laravel: whereHas-> WhereHas-> Где запрос. Нужно добавить wherePivot
I.E. Мне нужно добавить wherePivot('registered', 1)
для отношения «многие ко многим» scheduledPrograms->attendees
. I Как мне это сделать? Мой разум взбирается со всех предложений.
$programs = ScheduledProgram::where('registration_start_date', '<=', $today)
->where('end_date', '>=', $today)
->whereHas('attendees', function($q) use($user)
{
$q->whereHas('user', function($q) use($user){
$q->where('id', $user->id);
});
})->get();
Модели
Attendee->belongsTo('User')
->belongsToMany('ScheduledPrograms')
User->hasMany('Attendee')
ScheduledProgram->belongsToMany('Attendee')
` ScheduledProgram Модель
public function attendees()
{
return $this->belongsToMany('Attendee', 'prog_bookings')->withPivot('registered','paid');
}
Мой 'registered' поле, где вы говорите, но Я назвал сводные таблицы «заказы» вместо того, чтобы позволить ему использовать имя по умолчанию. Я попробовал, как вы сказали, но я получаю сообщение об ошибке «Неизвестный столбец». – Phil
мм, если вы не использовали соглашения, вы должны установить имя сводной таблицы в определении отношения, например: $ this-> attribToMany ('Role', 'user_roles', 'user_id', 'foo_id'); Итак, используя ваши имена, модель ScheduledProgram должна быть: $ this-> attribToMany ('Atendee', 'bookings', 'schedule_program_id', 'atendee_id') -> withPivot ('registered'); –
Моя модель настроена правильно. Я отредактировал свое сообщение, чтобы включить в мою модель отношение pivot. Кажется, что wherePivot ведет себя как метод with_Variable_ и делает предложение _where_, используя любое последующее _where_ в качестве имени столбца. Вот ошибка, показывающая выполняемый оператор SQL. http://imgur.com/Y2XUOsE – Phil