Led*_*kin 5 php arrays doctrine doctrine-orm symfony-3.1
我想知道是否可以在学说查询生成器中检查一个数组是否包含另一个数组的任何元素。
就我而言,我想获取传入参数的数组中至少具有该类别之一的所有产品(项目)。
Item 与 Category 的关系:
/**
* @ORM\ManyToMany(targetEntity="Category")
* @ORM\JoinTable(name="items_categories",
* joinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id", nullable=false)},
* inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id", nullable=false)}
* )
*/
private $categories;
Run Code Online (Sandbox Code Playgroud)
我从 Item 存储库中的第一次尝试(如果我只有一个值要检查,我知道这项工作):
public function getListItemsFromCatList($listCat) {
$qb = $this->createQueryBuilder('i');
$qb->select('i')
->where($qb->expr()->like('i.categories', ':listCat'))
->setParameter('listCat', '%"' . $listCat . '"%');
return $qb->getQuery()->getResult();
}
Run Code Online (Sandbox Code Playgroud)
$listCat 是一个 Category Entity 数组:
array (size=5)
0 =>
object(ItemBundle\Entity\Category)[518]
private 'id' => int 22
private 'children' =>
object(Doctrine\ORM\PersistentCollection)[520]
private 'snapshot' =>
array (size=2)
...
private 'owner' =>
&object(ItemBundle\Entity\Category)[518]
private 'association' =>
array (size=15)
...
private 'em' =>
object(Doctrine\ORM\EntityManager)[796]
...
private 'backRefFieldName' => string 'parent' (length=6)
private 'typeClass' =>
object(Doctrine\ORM\Mapping\ClassMetadata)[579]
...
private 'isDirty' => boolean false
protected 'collection' =>
object(Doctrine\Common\Collections\ArrayCollection)[515]
...
protected 'initialized' => boolean true
private 'parent' => null
private 'name' => string 'Luxe' (length=4)
1 =>
object(ItemBundle\Entity\Category)[504]
private 'id' => int 25
private 'children' =>
object(Doctrine\ORM\PersistentCollection)[505]
private 'snapshot' =>
array (size=0)
...
private 'owner' =>
&object(ItemBundle\Entity\Category)[504]
private 'association' =>
array (size=15)
...
private 'em' =>
object(Doctrine\ORM\EntityManager)[796]
...
private 'backRefFieldName' => string 'parent' (length=6)
private 'typeClass' =>
object(Doctrine\ORM\Mapping\ClassMetadata)[579]
...
private 'isDirty' => boolean false
protected 'collection' =>
object(Doctrine\Common\Collections\ArrayCollection)[500]
...
protected 'initialized' => boolean false
private 'parent' =>
object(ItemBundle\Entity\Category)[512]
private 'id' => int 23
private 'children' =>
object(Doctrine\ORM\PersistentCollection)[513]
...
private 'parent' =>
object(ItemBundle\Entity\Category)[518]
...
private 'name' => string 'Bijoux' (length=6)
private 'name' => string 'Bagues' (length=6)
Run Code Online (Sandbox Code Playgroud)
我会添加一个连接来解决它。
public function getListItemsFromCatList($listCat) {
$em = $this->getDoctrine()->getManager();
$qb = $em->createQueryBuilder();
$qb->select('i')
->from('AppBundle:Item', 'i')
->innerJoin('i.categories','cat')
->where('cat IN (:listCat)')
->setParameter('listCat', $listCat);
return = $qb->getQuery()->getResult();
}
Run Code Online (Sandbox Code Playgroud)
请注意,此方法将过滤项目内的类别。这意味着当您尝试从给定项目i, 中获取类别时$i->getCategories(),它将仅返回与i匹配的类别$listCat。
如果您需要使用每个项目的所有类别,即使这些类别与$listCat. 我会建议您使用子查询进行过滤,并使用主查询返回完整项目。如果您需要任何进一步的帮助,请发表评论。
| 归档时间: |
|
| 查看次数: |
8209 次 |
| 最近记录: |