symfony Sylius和Doctrine表达式生成器-多个字段过滤器

fjaof16o  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(89)

我正在使用Sylius 1.11,并试图基于本机Order实体的自定义字段构建自定义过滤器。
该字段名为author,它引用adminUser_id。有时,没有adminUser_id,所以数据库中的字段是null
我想创建一个多选过滤器,以便在adminUser_id等于2且为null时查找订单。
下面是过滤器:

<?php

declare(strict_types=1);

namespace App\Component\App\Grid\Filter;

use Sylius\Component\Grid\Data\DataSourceInterface;
use Sylius\Component\Grid\Filtering\FilterInterface;

final class MultiselectFilterAuthor implements FilterInterface
{
    public function apply(DataSourceInterface $dataSource, string $name, $data, array $options): void
    {
        if (empty($data)) {
            return;
        }

        $field = $options['field'] ?? $name;

        $expressionBuilder = $dataSource->getExpressionBuilder();

        $expressions[] = $expressionBuilder->isNull('author');
        $expressions[] = $expressionBuilder->in('author.id', [2]);

        $dataSource->restrict($expressionBuilder->orX(...$expressions));
    }
}

如果我独立地尝试每个表达式,它就工作了。
$expressionBuilder = $expressionBuilder->isNull('author');
->仅显示有作者的订单=== null
但是当我把它们结合起来的时候,就不管用了

aamkag61

aamkag611#

我终于知道为什么不管用了...
我需要在Sylius网格查询构建器中为Order实体添加一个author联接:

public function createListQueryBuilder(): QueryBuilder
    {
        $qb = $this->createQueryBuilder('o');

        return $qb
            ->addSelect('customer')
            ->leftJoin('o.customer', 'customer')
            ->leftJoin('o.author', 'author')
            ->leftJoin('customer.contacts', 'contacts')
            ;
    }

相关问题