Я пытаюсь объединить несколько таблиц, но не исключаю результаты, если значение соответствует одной из них. Это потому, что пользователь может быть либо музыкантом, либо группой.
Мои таблицы:
Users
------
id, name, location, type (musician or band)
Bands:
id, user_id, experience
Musicians:
id, user_id, experience, commitment
Мой запрос должен возвращать всех пользователей (группы или музыкантов) из указанного c местоположения где уровень опыта равен «новичку».
// get users
$query = User::select(['id','name','location','type']);
// get bands with experience beginner
$filteredBands = Band::select('user_id', 'id')->where('experience', 'beginner');
// join bands with users
$query->joinSub($filteredBands, 'filtered_bands', function($join) use($data) {
$join->on('users.id', '=', 'filtered_bands.user_id');
});
// Load the band so I get the nice model structure from laravel
$query->with('band');
// Do the same for Musicians
$filteredMusicians = Musician::select('user_id', 'id')->where('experience', 'beginner');
$query->joinSub($filteredMusicians, 'filtered_musicians', function($join) use($data) {
$join->on('users.id', '=', 'filtered_musicians.user_id');
});
$query->with('musician');
var_dump($query->get());
Моя проблема в том, что он получает пользователей только там, где сделаны оба соединения, где я хотел бы одно или другое. Есть ли концепция orJoin или что-то подобное?
Спасибо!