orWhereHas - группировка параметров по запросу Eloquent - как мне это сделать в Laravel?
В красноречивом запросе, который я строю, я накладываю ограничение наhas
отношения с использованием Laravel 4.1whereHas
а такжеorWhereHas
методы.
В примере приложения для футбола я хочу ограничитьhomeClub
а такжеawayClub
отношения, так что я могу, результирующий набор выберет, где homeClub = Arsenal ИЛИ awayClub = Arsenal.
Эта проблема возникла изпредыдущий вопрос Кажется, что при использованииorWhereHas
метод - результирующий sql нет группаor
ограничение.
Запрос (соответствующий отрывок, который помещает ограничения):
$ret
->where( function( $subquery ) use ( $ret ){
$ret->whereHas('homeClub', function ( $query ){
$query->where('name','Arsenal' );
})->orWhereHas('awayClub',function ( $query ){
$query->where('name','Arsenal' );
});
})
->where( function ( $subquery ) use ( $ret, $parameterValues ){
$ret->whereHas('season', function ($query) use ( $parameterValues ){
$query->where('name', $parameterValues['season_names'] );
});
} )
->whereHas('territory',function( $query ) use ( $parameterValues ){
$query->where('region','Australia');
})->get()->toArray();
Это производит sql:
SELECT * FROM `broadcasts` WHERE
(SELECT count(*) FROM `uploads` WHERE `broadcasts`.`upload_id` = `uploads`.`id` and `type` = 'international-audience') >= '1'
and
(SELECT count(*) FROM `clubs` WHERE `clubs`.`id` = `broadcasts`.`home_club_id` and `name` = 'Arsenal') >= '1'
or
(SELECT count(*) FROM `clubs` WHERE `clubs`.`id` = `broadcasts`.`away_club_id` and `name` = 'Arsenal') >= '1'
and
(SELECT count(*) FROM `seasons` WHERE `broadcasts`.`season_id` = `seasons`.`id` and `name` = '2012/13') >= '1'
and
(SELECT count(*) FROM `territories` WHERE `broadcasts`.`territory_id` = `territories`.`id` and `region` = 'Australia') >= '1'
Но это нечто я хочу, потому что, ссылаясь на красноречивое заявление, клубные запросыгруппироваться и запрос выше либо выбирает ограничения homeClub ИЛИ, awayClub, название сезона, регион территории. Что я'm намерен следующий SQL:
SELECT * FROM `broadcasts` WHERE
(SELECT count(*) FROM `uploads` WHERE `broadcasts`.`upload_id` = `uploads`.`id` and `type` = 'international-audience') >= '1'
and
((SELECT count(*) FROM `clubs` WHERE `clubs`.`id` = `broadcasts`.`home_club_id` and `name` = 'Arsenal') >= '1'
or
(SELECT count(*) FROM `clubs` WHERE `clubs`.`id` = `broadcasts`.`away_club_id` and `name` = 'Arsenal') >= '1' )
and
(SELECT count(*) FROM `seasons` WHERE `broadcasts`.`season_id` = `seasons`.`id` and `name` = '2012/13') >= '1'
and
(SELECT count(*) FROM `territories` WHERE `broadcasts`.`territory_id` = `territories`.`id` and `region` = 'Australia') >= '1'
Обратите внимание .. скобки в подзапросе клуба.
Кто-нибудь знает, как бы я написал это как красноречивый запрос? Я действительно неЯ не хочу возвращаться к свободному общению.