我有两个表在我的sonata-admin设置与Symfony2:'product'
和'product_description'
。第二个包含几种语言产品的描述,并将product_id和language_id列定义为复合主键。在产品表中没有language_id
列,因此根据客户选择的语言,它应该与描述动态结合。JoinColumns列和静态值
目前我正在试图通过一个OneToOne
和JoinColumns
注释的帮助加入其中,但是如何才能product_description
与language_id
加入成为一个静态值(这是不存在的产品表中的列)?
/**
* ProductDescription
*
* @ORM\Table(name="product_description")
* @ORM\Entity
*/
class ProductDescription
{
/**
* @var integer
*
* @ORM\Column(name="product_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $productId;
/*
* @var boolean
*
* @ORM\Column(name="language_id", type="boolean")
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $languageId;
....
}
/**
* Product
*
* @ORM\Table(name="product")
* @ORM\Entity
*/
class Product
{
/**
* @var integer
*
* @ORM\Column(name="product_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
*/
private $productId;
/**
* @ORM\OneToOne(targetEntity="ProductDescription")
* @ORM\JoinColumns({
* @JoinColumn(name="product_id", referencedColumnName="product_id"),
* @JoinColumn(name="??????", referencedColumnName="language_id")
* })
*/
private $productDescription;
....
}
编辑:更多的代码添加
// admin class
protected function configureListFields(ListMapper $listMapper)
{
$listMapper->addIdentifier('productId', 'integer')
->addIdentifier('productDescription.productName');
}
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper->add('offersId', 'integer', array('read_only' => true))
->add('productDescription.productName');
}
我试图用手工的QueryBuilder参与进来,但是的createQuery()方法会给列表视图奇怪的结果。
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
$query->addSelect('p')->innerJoin('AppBundle\Entity\ProductDescription', 'p', 'WITH', $query->getRootAlias().'.productId = p.productId and p.languageId = 2');
return $query;
}
编辑:这里是一个类似的问题在休眠 - 也许可以转化为教条?
https://forum.hibernate.org/viewtopic.php?f=1&t=986966
你有任何代码可以告诉我们吗? –
添加了代码,如何在product_id上连接这两个表以及为language_id指定一个静态值,例如2. – Chris