【问题标题】:How to use object listing for condition on relation object如何将对象列表用于关系对象的条件
【发布时间】:2016-04-20 17:11:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php sql content-management-system relationship pimcore


    【解决方案1】:

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

    这使您可以像这样使用您的条件:

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

    注意 % 符号前后的逗号。

    来源:Filtering for relations via PHP API

    【讨论】:

    • 我想你误会了,我只需要过滤掉tagid = 11,我不需要111、112等等。
    • 按预期使用上述程序对我有用。我有两个对象,第一个具有这些关系 ,00,11,111,112,189,第二个具有这些关系 ,00,111,112,189, 。当使用 WHERE 标签 LIKE '%,11,%';我只得到了预期的第一个对象。 % 符号前后的逗号非常重要。
    【解决方案2】:

    我知道这是旧的,但我想添加一些我只是挣扎并且无法真正找到任何相关内容的东西。 如果您有 Multihref,则需要添加您所关联的对象类型。如果是对象(如我的情况),它应该看起来像

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

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

    【讨论】:

      【解决方案3】:

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

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

      ...用类的ID替换XXX

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-13
        • 1970-01-01
        • 2015-05-23
        • 2016-07-22
        • 1970-01-01
        • 2014-10-15
        • 1970-01-01
        相关资源
        最近更新 更多