in()方法 - Typo3 - queryInterface

时间:2013-07-25 16:49:17

标签: php doctrine-orm typo3 extbase typo3-flow

如果您使用Typo3或Flow3的QueryInterface,您可以在QueryInterface Extbase Dokumentation中查找可以使用的所有功能。我已经在Flow3中创建了一些AND,OR和LogicalNOT,它们运行得很好。

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

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

我想这是因为find()的返回值类型。您可以在数组中获得“NULL”,一个对象或多个对象。但为什么它不起作用,我该如何解决呢?

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

它应该像这样工作(假设状态对象集合不为空):

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

答案 1 :(得分:0)

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

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

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

我希望它有所帮助! 奥利弗

答案 2 :(得分:0)

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

$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; }