2013-08-04 38 views
0

Extbase中使用的“in”属性似乎不适用于我。“in”属性在Extbase中查询TYPO3中的多值

$actor包含Actor model objects的数组。我的Movie modelActor是m:n关系。

我想这样的事情在我Movie Repository

$query=$this->createQuery(); 
$query->matching($query->in('actors',$actors)); 
$result = $query->execute()->toArray(); 

$result是显示NULL

我试图传递的actor uids太阵列但不会工作,以及:

$query->matching($query->in('actors',[$actor_1_uid,$actor_2_uid])); 

有当然是contains但是使用in应该更多对个别。

回答

2

对不起,但$query->in是错误的方法。 AFAIK它不适用于m:n仅适用于1:n。

尝试这样的事情,$演员是从模型中的查询结果或演员资料库:

$constraints = array(); 
foreach ($actors as $actor) { 
    $constraints[] = $query->contains('actors', $actor->getUid()); 
} 

if (!empty($constraints)) { 
    $result = $query->matching($query->logicalOr($constraints))->execute(); 
} 

当然你也可以使用自己的uid的数组中循环,然后刚落getUid()方法

+0

不应该logicalOr有两个参数? – dora

+1

'logicalOr'采用多个约束或一个数组...请参阅http://goo.gl/GWojt0(和http://api.typo3.org/extbase/) – Mateng

3

我在您的声明中看不到任何问题。要明确一点,一个“in”声明必须放置在匹配声明中的某个地方,在你的情况下这是正确的。

然而,你应该改变你创建查询

$query = $this->createQuery(); 

,而不是

$query=$this->create->query(); 

如果还是没有结果,我建议你检查的确切通过extbase执行的SQL语句,有在TYPO3中做到这一点很棘手。

你必须找到核心下列文件:/typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php

找到replacePlaceHolders功能,并在结尾处添加以下代码函数:

if (strpos($sqlString, "my_table_name") !== false) { 
echo $sqlString; 
} 

我会回应正在为以下“my_table_name”表进行的每个声明。当然,不要在生产服务器上这样做。

我希望它能帮上忙! 干杯, 奥利维尔

+0

这真的很方便。谢谢:) – dora

+0

我写过echo声明。我的扩展是后端模块。但它没有给出任何输出。为什么是这样? – Ques