У меня есть объект с именем Products
<?php
class Product
{
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Product", inversedBy="list")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_parent", referencedColumnName="id", nullable=true)
* })
*/
private $parent;
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Product", mappedBy="parent")
*/
private $list;
//... more properties
}
Метод getList
выглядит следующим образом:
public function getList()
{
if($this->list !== null){
return $this->list->getValues();
}
}
Теперь в контроллере у меня возникает проблема, иногдаМне нужно отфильтровать список по свойству того же объекта, а в другое время он мне нужен без фильтра.
Я создаю запрос с помощью dql:
$query = "SELECT p
FROM AppBundle:Product p
WHERE (p.parent= 0 OR p.parent IS NULL)
AND p.code != '' ";
$createdQuery= $this->em->createQuery($query)->setParameters($params);
$result= $createdQuery->getResult();
Продукты получаются иззапрос имеет правильные данные, но если я попытаюсь напечатать $products[0]->getList()
, он получит все дочерние продукты, и мне нужно будет извлечь только те, которые имеют p.code, а не пустую строку.
Есть лиспособ применения всех определенных критериев к полному результату запроса или каким-либо образом передать параметр методу getList()
, чтобы применить к этому методу логику, чтобы иногда фильтровать результаты списка, а иногда и не фильтровать список?
ОБНОВЛЕНИЕ
Пример данных, которые я получаю из базы данных:
Product 1
{
id : 1,
parent : null,
code: 'aa',
list : [
Product 2
{
id : 2,
parent : object with the product 1,
code: '',
list : []
}
]
}
Product 3
{
id : 3,
parent : null,
code: 'bb',
list : []
}
Иногда мне нужно только извлечь все продукты, а иногда я тольконужны ли эти ведьмы активны = 1.
С помощью запроса в примере я получаю все продукты правильно, но AND p.code != ''
применяется только к тем, которые находятся в корне. Я хочу применить этот фильтр к свойству списка, но не всегда.