如何在关系对象上使用对象列表作为条件

时间:2016-01-15 06:30:37

标签: php relationship pimcore

之前可能会问这个问题,但我无法找到令人满意的答案。让我们将名为Product的对象与Tags相关联。因此,如果我们需要找到特定Tag的产品,那么pimcore对象列表直接在主表/视图上工作,它将关系存储为单列中的逗号分隔值。因此,其他人建议只使用LIKE搜索解决方案。

$entries ->setCondition("Tags LIKE " . $entries->quote("%".$tagId."%"));

但我认为,这个解决方案有一个更大的问题如果某些产品存储标签ID为00,111,112,189并且我们想要搜索标签id = 11它将返回不良标签ID的产品,如111,112记录。

完全忽略pimcore对象并使用Zend DB调用object_ [PRODUCTCLASSID]和object_relations_ [PRODUCTCLASSID]视图的一种解决方案。

如果存在任何其他解决方案来解决仅使用Pimcore Object API的问题。

3 个答案:

答案 0 :(得分:3)

据我所知,关系是这样保存的:,00,111,112,189,。所以在开头和结尾用逗号。

这使您能够使用以下条件:

$entries ->setCondition("Tags LIKE " . $entries->quote("%,".$tagId.",%"));

请注意符号之前和之后的逗号。

答案 1 :(得分:2)

根据数据量,使用子选择更好:

$entries ->setCondition("o_id IN (SELECT src_id FROM object_relation_XXX where dest_id = $tagId AND fieldname = 'Tags')");

...用类的id替换XXX

答案 2 :(得分:0)

我知道这已经过时了,但我想添加一些我刚刚努力的东西,而且无法找到任何相关内容。 如果您有Multihref,则需要添加与之相关的对象类型。如果是Object(在我的例子中),它应该看起来像

"%,object|".$relationId.",%"

也许这可以节省一些时间:)