gpt4 book ai didi

sql - Doctrine 2.1 DQL-多对多查询多个值-多个类别中的项目?

转载 作者:行者123 更新时间:2023-12-03 13:44:14 25 4
gpt4 key购买 nike

这似乎是一个基本要求,但是我似乎无法使其正常工作,因此我要么缺少一些愚蠢的东西,要么不了解应该如何做。提前致谢。

我有两个具有多对多关系的学说实体:项目和类别。它们由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;

....
}


我想做的是运行一个查询以返回所有属于“ x”个类别的所有项目-我认为/认为应该是带有AND子句的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多个符合条件的项目:都属于这两个类别。

有人看到我在做什么错吗?这应该是AND选择...吗?基本上,我只是想知道如何在Doctrine 2+中查询多对多关系,其中必须满足多个值...

最佳答案

对于任何感兴趣的人,我(很痛苦)想出了办法。教义实际上应该更好地解释这一点,而不是DQL页面上的一句话……。

基本上,它不是AND查询,而是AND查询成员。对于每个类别,必须创建一个MEMBER OF,然后使用AND将其添加到整个查询中:

SELECT j, t FROM Entity\Item j LEFT JOIN j.itemImages t WHERE ?0 MEMBER OF j.categories AND ?1 MEMBER OF j.categories AND ?2 MEMBER OF j.categories, etc.


这将返回所请求的所有类别中的所有项目。

关于sql - Doctrine 2.1 DQL-多对多查询多个值-多个类别中的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com