HABTM发现带有``ND''个联接,而不是``R''个联接。

HABTM发现带有``ND''个联接,而不是``R''个联接。,第1张

HABTM发现带有``ND''个联接,而不是``R''个联接。

您可以这样做:

  1. 从您的ModelA构建一个查询,然后(通过连接模型)加入ModelB,过滤出具有您要查找的值之一的ModelB,即将它们放入OR(即

    where ModelB = 'ModelB_1' or ModelB = 'ModelB_2'
    )。 通过此查询,结果集将具有多个“ ModelA”行,对于每个满足的ModelB条件,该行恰好为一行

  2. 在您需要的ModelA列上的查询中按条件添加一组(如果需要,甚至可以将它们全部添加)。每行 的count( )等于满足的ModelB条件数*。

  3. 添加一个“具有”条件,仅选择

    count(*)
    等于您需要满足的ModelB条件数的行

例子:

model_bs_to_find = [100, 200]ModelA.all( :joins=>{:model_a_to_b=>:model_bs},  :group=>"model_as.id",  :select=>"model_as.*", :conditions=>["model_bs.id in (?)", model_bs_to_find],  :having=>"count(*)=#{model_bs_to_find.size}")

注意,以这种方式指定的组和选择参数将在MySQL中工作,这样做的标准SQL方法是将整个model_as列的列表放入组和选择参数中。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5675392.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存