Это может показаться рудиментарным запросом, но я не могу заставить его работать, поэтому я либо пропускаю что-то глупое, либо не понимаю, как это должно быть сделано. Спасибо заранее.
У меня есть два объекта doctrine с отношением "многие ко многим": "Элементы и категории". К ним присоединяются items_has_categories.
/**
* Item
*
* @Table(name="items")
* @Entity(repositoryClass="Entity\Repository\Item")
*/
class Item
{
....
/**
* @var Categories
*
* @ManyToMany(targetEntity="Categorie", inversedBy="items", cascade={"persist"})
* @JoinTable(name="items_has_categories",
* joinColumns={
* @JoinColumn(name="items_id", referencedColumnName="id")
* },
* inverseJoinColumns={
* @JoinColumn(name="categories_id", referencedColumnName="id")
* }
* )
*/
private $categories;
....
}
/**
* Categorie
*
* @Table(name="categories")
* @Entity(repositoryClass="Entity\Repository\Categorie")
*/
class Categorie
{
.....
/**
* @var Items
*
* @ManyToMany(targetEntity="Item", mappedBy="categories")
*/
private $items;
....
}
И то, что я пытаюсь сделать, - это запустить запрос, чтобы возвращать все элементы во всех "х" числах категорий, которые, как я думаю/думал, должны быть предложением SELECT и И:
class Item extends EntityRepository
{
public function findItemsByCategories($categories)
{
$qString = 'SELECT j, t, c FROM Technique\Entity\Item j LEFT JOIN j.itemImages t JOIN j.categories c WHERE';
$i = 0;
foreach ($categories as $c)
{
$qString .= ' c.name = ?' . $i;
if ($i < (count($categories)-1))
{
$qString .= ' AND';
}
$i++;
}
$query = $this->_em->createQuery($qString);
$query->setParameters($categories);
return $query->getResult();
}
В этом маленьком фрагменте кода нет ошибок и выплевывается следующий запрос DQL SELECT (когда в массиве отправляются 2 категории: $categories):
SELECT j, t, c FROM Technique\Entity\Item j LEFT JOIN j.itemImages t JOIN j.categories c WHERE c.name = ?0 AND c.name = ?1
Это всегда возвращает пустой массив, т.е. никаких результатов. Хотя в моей БД есть более 20 элементов, соответствующих критериям: находятся в обеих категориях.
Кто-нибудь видит, что я здесь делаю неправильно? Предполагается, что это выбор И...? В принципе, я просто хотел бы узнать, как запрашивать отношения "многие ко многим" в Doctrine 2+, где должно быть выполнено более одного значения...