Doctrine 2 кастомные поля сущности которые находятся как записи в других таблицах
product
| id |
|---|
| 1 |
| 2 |
Class Product {
#[ORM\OneToMany(mappedBy: 'product', targetEntity: ProductItemValue::class)]
private Collection $itemValues;
product_item_value
| id | product_id | item_id | value |
|---|---|---|---|
| 1 | 1 | 1 | Test Name |
| 2 | 1 | 2 | Test Description |
Class ProductItem {
#[ORM\ManyToOne(targetEntity: Product::class, inversedBy: 'itemValues')]
#[ORM\JoinColumn(nullable: false)]
private Product $product;
product_item
| id | handle | name |
|---|---|---|
| 1 | NAME | Name |
| 2 | DESCRIPTION | Description |
class ProductItem
{
public const NAME = 'NAME';
public const DESCRIPTION = 'DESCRIPTION';
#[ORM\Column(type: 'string', length: 30)]
protected string $handle;
#[ORM\Column(type: 'string', length: 30)]
protected string $name;
Получаю продукты вот таким запросом:
$qb = $this->createQueryBuilder('product');
$qb
->select([
'product',
'productItemValues',
'productItem',
])
->innerJoin('product.ItemValues', 'productItemValues')
->innerJoin('productItemValues.Item', 'productItem')
Ну и во вьюхе вывожу так:
product.ItemValues | filter(v => v.Item.handle == 'NAME') | first
Есть ли какой то более удобный подход к получению полей энтити, если они расположены не как колонки в таблице, а как связи? Чтоб не нужно было делать filter | first. Может в доктрине при селекте можно сделать какой то alias?