Я не смог создать этот SQL запрос на Laravel:Laravel: несколько, где пункты в много-ко-многим
select * from `events_theatre` where
event_id IN (
select id from events where (`events`.`id` = `events_theatre`.`event_id` and `user_id` = 1 and `event_type` ='theatre') and `events`.`deleted_at` is null
)
or event_id IN (
select id from events inner join events_managers on events.id = events_managers.event_id and events_managers.user_id = 1
)
and `events_theatre`.`deleted_at` is null
Модель Events_Theatre имеет это отношение:
public function event()
{
return $this->hasOne('App\MyEvent', 'id');
}
While модель MyEvent имеет это отношение:
public function managers()
{
return $this->belongsToMany('App\User', 'events_managers', 'event_id', 'user_id');
}
Pratically модель Events_Theatre является модель событий, и Ev модель может иметь много менеджеров, но только 1 администратор.
Мне нужно получить этот Event_Theatre (и их MyEvent), пользователь которого является администратором или одним из менеджеров.
Я пытался с этим красноречивым запрос:
$list = App\Events_Theatre::whereIn('event_id', function ($query) {
$query
->where(['user_id' => Auth::id(), 'event_type' => 'theatre'])
->orWhereHas('managers', function ($query) {
$query->where('user_id', Auth::id());
});
});
Но я получаю этот SQL-запрос:
select * from `events_theatre` where
exists (
select * from `events` where (
`events`.`id` = `events_theatre`.`event_id` and `user_id` = 1 and `event_type` = 'theatre'
) or exists (
select * from `users` inner join `events_managers` on `users`.`id` = `events_managers`.`user_id` where `events_managers`.`event_id` = `events`.`id` and `user_id` = 1
)
and `events`.`deleted_at` is null
) and `events_theatre`.`deleted_at` is null
Но его неправильно. Как я могу это решить?
Благодаря
ОБНОВЛЕНО
я получил ответ. Это красноречивый код, который я использовал:
$list = Events_Theatre::whereHas('event', function ($query) {
$query
->where(['user_id' => Auth::id(), 'event_type' => 'theatre']);
})->orWhereHas('event', function ($query) {
$query
->whereHas('managers', function ($query) {
$query->where('user_id', Auth::id());
});
})->get();
В, где таблица ваши поля user_id и event_type, из первого выбора в существую? –
Не могли бы вы указать, какие условия вы пытаетесь найти. Это немного запутанный вывод из всех разных sql, которые вы вставили. –
Мне нужно получить этот Events_Theatre (и их MyEvent), пользователь которого является администратором или одним из менеджеров. –