下午好。
我有一个名为' Cliente'另一个名为“Acct'这个比例是1' Cliente'对于许多人来说' Acct'当我使用has_one关系时,它会获取数百万的' Acct'只选择其中一个结果。
关于&Clicete'
的模型声明'accts' => [
self::HAS_MANY,
'Acct',
'cliente_id',
],
'lastAcct' => [
self::HAS_ONE,
'Acct',
'cliente_id',
'order' => 'acct.id DESC',
],
答案 0 :(得分:2)
在Yii(Yii1以及Yii2)中,创建一个" Has One"关系不会自动将LIMIT 1
应用于查询。您可以在此处详细了解其背后的原因:https://github.com/yiisoft/yii/pull/2113
您应该手动添加限制子句,如下所示:
'lastAcct' => [
self::HAS_ONE,
'Acct',
'cliente_id',
'order' => 'acct.id DESC',
'limit' => '1'
],
答案 1 :(得分:1)
这个“限制”用于输入主要查询,而不仅仅是关系,例如,如果你搜索成千上万的“客户”,每个“客户”中的最后一个'acct'将无效,将只获得一个'客户'。< / p>
补充......
要解决这个问题,我使用子查询,例如:
LEFT OUTER JOIN `radacct` `acct` ON ((acct.username = t.login) AND (acct.radacctid = (SELECT radacctid FROM `radacct` `acct_subquery` WHERE acct_subquery.username = t.login GROUP BY acct_subquery.username ORDER BY acct_subquery.radacctid DESC LIMIT 1)))
但令我担心的是,在这个子查询太酷了数百万的结果之后,这是必须做的和ERP报告,每周,每月,每年以及自从他创办公司以来。