【发布时间】:2017-02-01 08:59:48
【问题描述】:
我有一个名为 Status 的实体,它具有自引用多对多关系来定义每个状态的下一个可用状态是什么:
class Status
{
private $id;
//...
/**
* @ORM\ManyToMany(targetEntity="Status", mappedBy="nextStatuses")
*/
private $previousStatuses;
/**
* @ORM\ManyToMany(targetEntity="Status", inversedBy="previousStatuses")
* @ORM\JoinTable(name="status_mapping",
* joinColumns={@ORM\JoinColumn(name="status_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="next_status_id", referencedColumnName="id")}
* )
*/
private $nextStatuses;
/**
* @ORM\OneToMany(targetEntity="OrderStatus", mappedBy="status")
* @ORM\OrderBy({"createdTime" = "ASC"})
*/
private $orderStatuses;
//...
/**
* Constructor
*/
public function __construct()
{
$this->nextStatuses = new \Doctrine\Common\Collections\ArrayCollection();
$this->previousStatuses = new \Doctrine\Common\Collections\ArrayCollection();
}
//...
}
我正在创建一个表单类型,需要将状态实体添加为字段并将其选择限制为 $nextStatuses 问题是 EntityType 需要一个 query_builder 我不能简单地说 $status->getNextStatuses()
我目前拥有的(并且有一些变体,但都没有奏效):
public function buildForm(FormBuilderInterface $builder, array $options)
{
//Current status passed as option
$status = $options['status'];
$builder->add('status', EntityType::class, array(
'class' => 'AppBundle\Entity\Status',
'query_builder' => function (StatusRepository $er) use ($status) {
return $er->createQueryBuilder('s')
->leftJoin('s.previousStatuses', 'ps')
->where('s.previousStatuses = :status')
->setParameter('status', $status);
},));
}
以上查询导致错误[Semantical Error] line 0, col 80 near 'previousStatuses': Error: Invalid PathExpression. StateFieldPathExpression or SingleValuedAssociationField expected.
【问题讨论】:
标签: symfony doctrine-orm