【问题标题】:Propel how make many to many query "OR" both tables推动如何使多对多查询“或”两个表
【发布时间】:2016-02-15 00:44:18
【问题描述】:

我正在使用 propel ORM 并且有两个表:

offer
    id | description | ....
tag
    id | Name | ....
offer_tag
    offerid | tagid 

其中offer_tag 是多二多表,并且两列都与各自的表 id 主键相关。

我的目标是通过 PROPEL 创建一个查询,该查询可以搜索word,它可能位于 offer.description 或 tag.name 中。 也就是说:如果我搜索eggs,我可以收到所有在offer.description 中有eggs 但不在tag.name 中的offer,或者在tag.name 中有eggs 但在offer.description 中的offer,或者在两个表中列。

有人可以帮帮我吗?

【问题讨论】:

  • 这句话没有意义:...where offer_tag 是 many two many table 并且两列都与各自的 table id 主键相关。
  • @AMACB ORM 是一种糟糕的反模式,它违背了 OOP 的本质。鉴于这种情况,您希望 ORM 用户有意义吗?
  • 感谢 cmets...但 PROPEL 不是我的选择...我必须管理一个项目,其中以前的开发人员的工作基于此 ORM。对我来说是令人沮丧的,但情况就是这样。

标签: php mysql sql orm propel


【解决方案1】:

已解决:

假设我想搜索单词milk,这可能是一个标签,或者在报价(产品)描述中......代码是:

$of = OfferQuery::create()
                  ->where('Offer.Description LIKE ? %milk%')
                  ->or()
                     ->useOfferTagQuery()
                        ->useTagQuery()
                            ->filterByName('milk')
                        ->endUse()
                    ->endUse();
                  ->find();

此代码仅查找至少在多对多表 (offer_tag) 和匹配标签或描述中具有关系的商品(产品)。 如果有一个offer,其描述中包含milk但没有标签,则此优惠将被排除在查询之外。

希望可以帮助别人。

【讨论】:

    猜你喜欢
    • 2015-11-01
    • 2019-05-04
    • 2011-07-20
    • 2014-10-09
    • 2018-11-06
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    相关资源
    最近更新 更多