У меня есть две таблицы в моей настройке sonata-admin с Symfony2: 'product'
и 'product_description'
. Второй содержит описания продуктов на нескольких языках и определяет столбцы product_id и language_id как составной первичный ключ. В таблице продуктов нет столбца language_id
, чтобы он динамически соединялся с описанием в зависимости от языка, который выбрал клиент.JoinColumns on column и static value
В настоящее время я пытаюсь присоединиться к их помощи 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;
}
Редактировать: Вот аналогичный вопрос в Hibernate - возможно, переносимый доктриной?
https://forum.hibernate.org/viewtopic.php?f=1&t=986966
У вас есть код, чтобы показать нам? –
Код добавлен, как присоединиться к этим двум таблицам на product_id и статическому значению для language_id, скажем 2. – Chris