Php 如何使用对象列表作为关系对象的条件

Php 如何使用对象列表作为关系对象的条件,php,sql,content-management-system,relationship,pimcore,Php,Sql,Content Management System,Relationship,Pimcore,这个问题以前可能被问过,但我找不到令人满意的答案。让我们有一个名为Product的对象,它与标记有关系。所以,如果我们需要为特定的标记查找产品,正如pimcore对象列表在主表/视图上直接工作一样,主表/视图将关系存储为逗号分隔的值,存储在单个列中。所以,只有像搜索这样的解决方案才会被其他人推荐 $entries ->setCondition("Tags LIKE " . $entries->quote("%".$tagId."%")); 但我认为,这个解决方案有一个更大的问题,如

这个问题以前可能被问过,但我找不到令人满意的答案。让我们有一个名为Product的对象,它与标记有关系。所以,如果我们需要为特定的标记查找产品,正如pimcore对象列表在主表/视图上直接工作一样,主表/视图将关系存储为逗号分隔的值,存储在单个列中。所以,只有像搜索这样的解决方案才会被其他人推荐

$entries ->setCondition("Tags LIKE " . $entries->quote("%".$tagId."%"));
但我认为,这个解决方案有一个更大的问题,如果一些产品存储标签id像00111112189,我们想在标签id=11上搜索,它也会返回不需要的标签id像111112记录的产品

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


如果存在任何其他解决方案,仅使用Pimcore对象API来解决此问题。

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

这使您能够像这样使用您的条件:

$entries ->setCondition("Tags LIKE " . $entries->quote("%,".$tagId.",%"));
请注意%符号前后的逗号


来源:

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

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

。。。用类的id替换
XXX

我知道这很古老,但我想添加一些我刚刚挣扎过的东西,但实际上找不到任何相关的东西。 如果您有Multihref,则需要添加正在关联的对象的类型。对于一个对象(如我的情况),它应该看起来像

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

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

我想你误解了,我只需要过滤掉tagid=11,我不需要111、112等等。使用上面的过程对我来说就像预期的那样有效。我有两个对象,第一个有这些关系,00,11111112189,第二个00111112189。使用WHERE标记时,如“%,11,%”;我只得到了预期的第一个对象。%符号前后的逗号非常重要。