in() method - Typo3 - queryInterface



如果使用Typo3或Flow3中的QueryInterface,则可以在QueryInterface Extbase文档中查找所有可以使用的函数。我已经在Flow3中创建了一些and、OR和LogicalNOTs,它们工作得很好。

我的问题是in()函数。假设我有一个"任务"对象,每个任务都有一个(多对一)"状态"对象。现在,我希望所有任务的状态都为"show"属性为"false"。这就是不起作用的地方:

$query->in('status',$this->statusRepository->findByShow(FALSE));

我想这是因为find()的返回值类型。您可以获取"NULL"、一个数组中的一个或多个对象。但为什么它不起作用,我该如何修复它?

谢谢你的帮助。

它应该这样工作(假设状态对象集不是空的):

$query = $this->createQuery();
$query->matching($query->in('status', $this->statusRepository->findByShow(FALSE)));
return $query->execute();

当您调用findByShow时,它返回QueryResult的对象,"in"方法中的第二个参数应该是混合元素的数组。

尝试使用QueryResult的toArray()方法将对象转换为状态模型的数组。

$this->statusRepository->findByShow(FALSE)->toArray();

我希望它能有所帮助
Olivier

我不确定他们现在是否解决了这个问题,但我记得去年花了几个小时才发现我必须这样做:

$statusIds = Array();
$status = $this->statusRepository->findByShow(FALSE);
foreach($status as $s) $statusIds[] = $status->getIdentifier();
$constraint = $query->in('status',$statusIds);
return $query->matching($constraint)->execute();

您的Status类必须实现以下内容:

public getIdentifier(){ return $this->Persistence_Object_Identifier; }

最新更新