Symfony2 表单:显示 select 基于底层数据(多对多)
Symfony2 Form: Show select based on underlying Data (many-to-many)
我有三个实体:
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;
}
颜色有很多种。每个产品都可以有多种颜色。
通过 Link 我可以将产品添加到我的 BasketProduct 中,在下一步中我可以 select BasketProduct 的颜色。我需要的是一种将颜色 select 字段限制为产品可用颜色的方法。
这是我的尝试,但它向我展示了所有颜色:
$builder->add('colour', 'entity', array('class' => 'Colour',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')
->select('u','i')
->leftJoin('u.products','i');
},
));
非常感谢您提供解决方案!谢谢! :)
$builder->add('colour', 'entity', array('class' => 'Colour',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('c')
->select('c')
->join('c.products','p');
},
));
编辑:修复拼写、连接方法(而不是 'Join')
innerJoin 只接受与产品相关联的颜色:
$builder->add('colour', 'entity', array('class' => 'Colour',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('c')
->select('c')
->innerJoin('c.products','p');
},
));
我有三个实体:
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;
}
颜色有很多种。每个产品都可以有多种颜色。
通过 Link 我可以将产品添加到我的 BasketProduct 中,在下一步中我可以 select BasketProduct 的颜色。我需要的是一种将颜色 select 字段限制为产品可用颜色的方法。 这是我的尝试,但它向我展示了所有颜色:
$builder->add('colour', 'entity', array('class' => 'Colour',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('u')
->select('u','i')
->leftJoin('u.products','i');
},
));
非常感谢您提供解决方案!谢谢! :)
$builder->add('colour', 'entity', array('class' => 'Colour',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('c')
->select('c')
->join('c.products','p');
},
));
编辑:修复拼写、连接方法(而不是 'Join')
innerJoin 只接受与产品相关联的颜色:
$builder->add('colour', 'entity', array('class' => 'Colour',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('c')
->select('c')
->innerJoin('c.products','p');
},
));