PHP Doctrine описание сущностей для получения полей из таблицы связи в отношениях many-to-many
Имеется две таблицы Товар (product) и Свойство (property), связанные отношением many-to-many через таблицу связи (product_properties). product_properties имеет три поля: product_id, property_id и value. Первые два поля - ключи из соответствующих таблиц, а третье - некоторое значение. Я создал два класса сущностей Doctrine:
/*
* @Table(name="product")
* @Entity
*/
class Product {
/**
* @ManyToMany(targetEntity=Property::class, inversedBy="products")
* @JoinTable(
* name="products_properties",
* joinColumns={ @JoinColumn(name="product_id", referencedColumnName="id") },
* inverseJoinColumns={ @JoinColumn(name="property_id", referencedColumnName="id") }
* )
*/
private $productProperties;
public function getProductProperties() {
return $this->productProperties;
}
}
/**
* @Entity
* @Table(name="property")
*/
class Property
{
/**
* @ORM\ManyToMany(targetEntity=Product::class, mappedBy="productProperties")
*/
private $products;
}
Каким образом можно сделать так, чтобы при запросе
$result = $em->getRepository(Product::class)->find($id)->getProductProperties();
в выдаче также было значение поля value из связующей таблицы (из product_properties)?
Ответы (1 шт):
Many-to-many служит только для связи между сущностями. т.е. в связующей таблице будут только идентификаторы связанных сущностей. Если вам нужны какие-то ещё данные в связи (например, количество), вам нужно делать промежуточную сущность для связи.
т.е у вас будет 3 сущности - Product, Property и ProductProperty. Отношения будут Product --(one to many)--> ProductProperty и Property --(one to many)--> ProductProperty.
Получить значения свойств можно будет примерно так:
<?php
foreach ($product->getProductProperties() as $productProperty) {
$productProperty->getProperty()->getName(); // Название свойства
$productProperty->getValue(); // Значение свойства
}