学说2.3标准.访问相关对象

Rob*_*bin 10 criteria symfony doctrine-orm

我试图根据Doctrine Docs建立一个标准.

不幸的是,他们没有告诉你如何访问相关对象的属性.让我给你举个例子.

我有一个产品的ArrayCollection.每个产品都有一个类别.我想过滤类别名称的ArrayCollection.现在我正在尝试设置如下标准:

$criteria = Criteria::create()
  ->where(Criteria::expr()->eq("category.name", "SomeCategoryName"));
Run Code Online (Sandbox Code Playgroud)

现在我得到以下例外:

An exception has been thrown during the rendering of a template ("Unrecognized field: category.name")
Run Code Online (Sandbox Code Playgroud)

如何访问相关对象?

Fli*_*lip 9

我查看了源代码Criteria::expr()->eq("name", --- second value ---).第二个值需要一个实例Doctrine\Common\Collections\Expr\Value.所以不可能放另一个Exprcriteria在那里.只有Expr AndOr另一个Expr.我很确定你是想用其他函数解决这个问题,filter()或者用它来获取迭代器getIterator().这是如何使用该filter()方法完成的.

$filteredProducts = 
    $products->filter(function($key, $element) use ($categoryName) {
        return $element->getCategory()->getName() === categoryName;
    });
Run Code Online (Sandbox Code Playgroud)

如果你可以Iterator为每个下一个关系,你可以嵌套foreach循环并在其中进行过滤.

  • 带有“条件”的“匹配”方法仅加载那些满足该条件的记录。```filter```方法强制完全收集负载。 (3认同)
  • 谢谢您的回答。我将在星期一测试您的“标准”。现在,我无法访问我的工作站。我会告诉您是否可行。但是在我看来,过滤器是个坏主意,因为所有类别都将被急切地加载,然后在磁盘上本地处理(永远不会像在数据库上那样出色)。 (2认同)