내 sonata-admin 설정에 Symfony2가있는 테이블이 두 개 있습니다 ('product'
및 'product_description'
). 두 번째 제품은 여러 언어로 제품에 대한 설명을 보유하고 product_id 및 language_id 열을 복합 기본 키로 정의합니다. 제품 표에는 language_id
열이 없으므로 고객이 선택한 언어에 따라 설명과 동적으로 결합해야합니다.열과 정적 값에 JoinColumns가 있습니다.
나는 현재 그러나 방법 product_description
(제품 테이블의 열로서 존재하지 않는) 정적 값으로 language_id
와 결합 될 수있다하는 OneToOne
및 JoinColumns
주석의 도움으로 그들과 합류하려고?
/**
* 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;
....
}
편집 : 더 많은 코드 나는() 메소드는 그러나 목록보기에 이상한 결과를 얻을 수 createQuery에 queryBuilder 손으로 그것을 결합하려고했습니다
// 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');
}
을 추가했다.
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;
}
편집 : 다음은 Hibernate에서의 유사한 질문입니다 - 아마도 doctrine으로 전송할 수 있습니까? 당신이 어떤 관련을 만들 수 있도록
https://forum.hibernate.org/viewtopic.php?f=1&t=986966
우리에게 보여줄 수있는 코드가 있습니까? –
코드가 추가되었습니다. product_id와 language_id의 고정 값에 대해이 두 테이블을 결합하는 방법을 말합니다. – Chris