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?


Ответы (0 шт):