Yii Framework和HAS_ONE与数百万行的关系

时间:2014-11-01 20:03:11

标签: mysql yii rows relation

下午好。

我有一个名为' 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',
],

2 个答案:

答案 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报告,每周,每月,每年以及自从他创办公司以来。