Я смущен тем, как работает DQL, и вам действительно нужна помощь здесь.Оператор DQL для отношения многих ко многим
У меня есть три таблицы, называемые «Band», «Agent» и «BandAgent».
BandAgent - средний стол для отношений «многие ко многим», содержащие agent_id и band_id.
Как я могу получить все агенты, связанные с определенным band_id, с помощью инструкции DQL?
EDIT
Этот код работает, но я не знаю, если это правильный способ сделать это. Echos на экран все связанные с ним агенты, связанные с Группой по BandID:
//$band is a Band Table Row
$bandAgentTable = Doctrine_Core::getTable('BandAgent');
$agentTable = Doctrine_Core::getTable('Agent');
$bandAgentTable = $bandAgentTable->findByBandId($band->getId());
foreach ($bandAgentTable as $bandAgent) {
$agent = $agentTable->findById($bandAgent['agent_id']);
echo $agent[0]['name'];
}
EDIT 2
В конце концов я читал чертовски много о доктрине, и закончили тем, удаляясь от Волшебные искатели. Следующий код, что я в конечном итоге делает для моего многие-ко-многим вопросом, если кому-то интересно:
public function getRelatedAgents() {
$q = Doctrine_Query::create()
->from('Band b')
->leftJoin('b.Agents a')
->where('b.id = ?', $this->getId());
$bands = $q->fetchArray();
return $bands[0]['Agents'];
}
Чтобы заставить его работать с Magic Finders, мне пришлось сделать два находок, чтобы связать отношения «многие-ко-многим». Я разместил свой код в своем вопросе выше, возможно, вы можете дать мне отзыв о том, что я делаю неправильно здесь. – jgallant
Упс! Я неправильно прочитал ваш код. Да, так вы можете это сделать. У вас есть информация, которую вы имеете в двух таблицах, и единственный способ, которым связаны эти таблицы, - через другую третью таблицу. Следовательно, вы должны запросить все три таблицы, насколько я могу думать с пустым животом. –
Это все еще возвращает строку из таблицы bandAgent, которая представляет собой таблицу соединения между Band и Agent. Мне нужно получить имя агента из таблицы Агента в качестве конечного результата. Я принимаю ваш ответ, так как вы в конечном итоге заставили меня решить мою проблему.Я просто не уверен, правильно ли я это сделал. – jgallant