2016-07-24 8 views
1

Этот запрос позволит мне получить все игроки команды, данные удостоверения личности и, когда его физическое состояние равняется 2.Доктрина конструктор запросов - поиск в двух таблицах

$qb = $this->createQueryBuilder('player') 
    ->where('player.physicalState= 2') 
    ->join('player.team', 'team') 
    ->addSelect('team') 
    ->where('team.id = :id') 
    ->setParameter('id', $teamId); 

return $qb->getQuery()->execute() 

Но дело в том, что: у меня есть еще один таблица OLD_TEAM. И Player имеет отношение один к многим с TEAM и OLD_TEAM. Таким образом, игрок может быть связан с TEAM или OLD_TEAM.

Так я хочу, чтобы улучшить/закончить мой запрос, чтобы иметь что-то вроде

Поиска своих игроков в команде с идентификатором й в таблице TEAM. Если этого не существует, я хочу искать то же самое, но в таблице OLD_TEAM.

Я не знаю, является ли это решение наилучшим решением для поиска, не стесняйтесь сообщать мне, существует ли более простое решение (ы).

PS: OLD_TEAM и TEAM используют одну и ту же последовательность для ПК.

Спасибо.

+0

Вы также можете попробовать использовать другой тип соединения. Добавьте .leftJoin ('player.team', 'team'). LeftJoin ('player.old_team', 'old_team'), а затем просто посмотрите, что происходит. Но imho вы действительно должны думать, что структура данных, например. как насчет игроков, принадлежащих нескольким командам? как насчет игроков, которые были на не только двух командах? и так далее ... – tarlepp

ответ

0

Заинтересованы, я следую.

Тогда, я думаю, что в этом случае вы можете использовать простой ИЛИ.

0

Не уверен, что это возможно с помощью querybuilder, но с чистым SQL, который есть. Один пример Checking whether an item does not exist in another table, который вы могли бы использовать.

+0

Лично я бы изменил структуру данных, чтобы эти запросы были проще. Например. Вы можете использовать сущности: player, team, player_in_team, а для player_in_team - столбцы; player_id, team_id, date_start, date_end с этой структурой данных, вы должны получить довольно легко, где каждый игрок играл в определенную дату. – tarlepp

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