2015-11-09 3 views
3

Я выбираю все ScheduledPrograms из определенного диапазона данных, который имеет Attendees, принадлежащих определенному User. Я хочу добавить фильтр, чтобы выбрать только SchduledPrograms где поворотное поле registered=1Laravel: 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'); 
    } 

ответ

1

вы пытались что-нибудь? Какая у вас ошибка?

Если «зарегистрировано» поле в сводной таблице между ScheduledPrograms и Atendees отношения, вы можете добавить где положение перед ГЭТ():

$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); 
       }); 
      }) 
      ->wherePivot('registered', 1) 
      ->get(); 
+0

Мой 'registered' поле, где вы говорите, но Я назвал сводные таблицы «заказы» вместо того, чтобы позволить ему использовать имя по умолчанию. Я попробовал, как вы сказали, но я получаю сообщение об ошибке «Неизвестный столбец». – Phil

+0

мм, если вы не использовали соглашения, вы должны установить имя сводной таблицы в определении отношения, например: $ this-> attribToMany ('Role', 'user_roles', 'user_id', 'foo_id'); Итак, используя ваши имена, модель ScheduledProgram должна быть: $ this-> attribToMany ('Atendee', 'bookings', 'schedule_program_id', 'atendee_id') -> withPivot ('registered'); –

+0

Моя модель настроена правильно. Я отредактировал свое сообщение, чтобы включить в мою модель отношение pivot. Кажется, что wherePivot ведет себя как метод with_Variable_ и делает предложение _where_, используя любое последующее _where_ в качестве имени столбца. Вот ошибка, показывающая выполняемый оператор SQL. http://imgur.com/Y2XUOsE – Phil

Смежные вопросы