Shopware 6 - 使用 DAL 过滤实体内的集合

The*_*ter 2 php shopware

我想获得所有产品流,其中至少有一个类别。我正在尝试这样做:

$criteria = new Criteria();
$criteria->addAssociation('categories');
$criteria->addFilter(new NotFilter(
    NotFilter::CONNECTION_OR,
    [
        new EqualsFilter('categories', null)
        // Also tried this:
        // new EqualsFilter('categories', ['id' => null])
    ]
));
$productStreams = $productStreamRepo->search($criteria, $this->context);
Run Code Online (Sandbox Code Playgroud)

但这总是导致以下错误:

Call to a member function buildAccessor() on null
Run Code Online (Sandbox Code Playgroud)

无论我做什么,我总是收到此错误。我做错了什么或者我将如何存档?

The*_*ter 6

其实很简单。而不是像这样添加过滤器:

new EqualsFilter('categories', null);
Run Code Online (Sandbox Code Playgroud)

你实际上需要这样做:

new EqualsFilter('categories.id', null);
Run Code Online (Sandbox Code Playgroud)

您还可以多次链接它,这允许您按子集合进行过滤:

new EqualsFilter('categories.salesChannel.id', null);
Run Code Online (Sandbox Code Playgroud)