Привет, ребята, у меня есть следующие две сущности:
class CarInqueritoExtraFields
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var DbaCustomFields
*
* @ORM\ManyToOne(targetEntity="DbaCustomFields", inversedBy="inqueritoExtraFields")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="id_custom_field", referencedColumnName="id", onUpdate="cascade", onDelete="cascade", nullable = false)
* })
*/
private $idCustomField;
}
class DbaCustomFields
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ORM\OneToMany(targetEntity="CarInqueritoExtraFields", mappedBy="idCustomField", cascade={"persist"})
*/
private $inqueritoExtraFields;
/**
* @var integer $idContacto
*
* @ORM\Column(name="nome", type="string", nullable=true)
*/
private $nome;
}
Обе эти сущности имеют наборы/получения. У меня есть следующий метод в моем DbaCustomFieldsRepository:
public function getCustomFieldsNotUsed($idInquerito) {
$qb = $this->getEntityManager()->createQueryBuilder();
$qb2 = $this->getEntityManager()->createQueryBuilder();
$qb->select('cf')
->from('CareAdminBundle:DbaCustomFields', 'cf')
->where($qb->expr()->notIn('cf.id', $qb2->select('ief.idCustomField')
->from('CareAdminBundle:CarInqueritoExtraFields', 'ief')
->where('ief.idInquerito = :idInquerito')
->getDQL()))
->setParameter('idInquerito', $idInquerito);
return $qb;
}
Я получаю $qb в моем formBuilder:
public function buildForm(FormBuilder $builder, array $options){
$id_inquerito = $this->id_inquerito;
$builder->add('idCustomField', 'entity', array(
'empty_value' => 'Escolha um campo',
'class' => 'Care\AdminBundle\Entity\DbaCustomFields',
'required' => false,
'query_builder' => function(\Care\AdminBundle\Repository\DbaCustomFieldsRepository $repository) use ($id_inquerito){
return $repository->getCustomFieldsNotUsed($id_inquerito);
}));
}
Но я получил эту ошибку, но я не могу понять, почему:
Во время рендеринга шаблона возникло исключение ("[Semantical Error] строка 0, столбец 80 рядом с 'idCustomField': Ошибка: Invalid PathExpression. Должно быть StateFieldPathExpression.") в ::base.html.twig в строке 19.
Я думаю, что проблема должна быть в моем QueryBuilder, но я не знаю почему. Любая помощь приветствуется! СПАСИБО :)
----------------------------------ОБНОВЛЕНИЕ-------- ------------------------------------- Ну, мне удалось получить решение, может быть, это не так правильный путь, но хорошо это работает. Проблема была в построителе запросов, поэтому я сделал это:
//First i pick the CarInqueritoExtraFields By IdInquerito and save the idCustomField from the retrieved object in a array.
$em = $this->getEntityManager();
$carInqueritoExtraFieldsByIdInquerito = $em->getRepository('CareAdminBundle:CarInqueritoExtraFields')->findByIdInquerito($idInquerito);
$arrayExtraFields = array();
foreach ($carInqueritoExtraFieldsByIdInquerito as $extraField) {
array_push($arrayExtraFields, $extraField->getIdCustomField()->getId());
}
//Then this:
$qb->select('cf')
->from('CareAdminBundle:DbaCustomFields', 'cf')
->where($qb->expr()->notIn('cf.id', $arrayExtraFields));
Если кто-то получит лучший способ, не стесняйтесь сказать мне :)