我有三个实体:
class Product {
/**
* @ORM\ManyToMany(targetEntity="Colour")
* @ORM\JoinTable(name="Product_Colour",
* joinColumns={@ORM\JoinColumn(name="product_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="colour_id", referencedColumnName="id")}
* )
*/
protected $colours;
}
class Colour {
/**
* @ORM\ManyToMany(targetEntity="Product", mappedBy="colours")
**/
protected $products;
}
class BasketProduct {
/**
* @ORM\ManyToOne(targetEntity="Colour")
* @ORM\JoinColumn(name="colour_id", referencedColumnName="id")
**/
private $colour;
/**
* @ORM\ManyToOne(targetEntity="Product")
* @ORM\JoinColumn(name="product_id", referencedColumnName="id")
*/
protected $product;
}
颜色中有很多颜色。每个产品都可以有多种颜色。
通过链接我可以将产品添加到我的BasketProduct中,在下一步中我可以选择BasketProduct的颜色。我需要的是一种方法,只将颜色选择字段限制为产品可用的颜色。 这是我的尝试,但它向我展示了所有颜色:
$builder->add('colour', 'entity', array('class' => 'Colour',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')
->select('u','i')
->leftJoin('u.products','i');
},
));
非常感谢解决方案!谢谢! :)
答案 0 :(得分:3)
$builder->add('colour', 'entity', array('class' => 'Colour',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('c')
->select('c')
->join('c.products','p');
},
));
编辑:修复拼写,加入方法(而不是“加入”)
答案 1 :(得分:-1)
innerJoin仅采用与产品相关联的颜色:
$builder->add('colour', 'entity', array('class' => 'Colour',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('c')
->select('c')
->innerJoin('c.products','p');
},
));