2014-11-01 44 views
2

下午好。Yii Framework和HAS_ONE與數百萬行的關係

我有一個名叫'Cliente'的模型,另一個叫'Acct'。對於許多'Acct'來說,這個比例是1'Cliente'。當我使用has_one關係時,它會獲取所有數以百萬計的'Acct'來僅選擇其中一個結果。

聲明關於「Cliente」的模式:

'accts' => [ 
      self::HAS_MANY, 
      'Acct', 
      'cliente_id', 
], 

'lastAcct' => [ 
      self::HAS_ONE, 
      'Acct', 
      'cliente_id', 
      'order' => 'acct.id DESC', 
], 

回答

2

Yii中(Yii1以及Yii2),創造了「有一個」關係確實自動將LIMIT 1到查詢。你可以閱讀更多的理由在這裏背後:https://github.com/yiisoft/yii/pull/2113

你應該手動添加限制條款,例如:

'lastAcct' => [ 
      self::HAS_ONE, 
      'Acct', 
      'cliente_id', 
      'order' => 'acct.id DESC', 
      'limit' => '1' 
], 
1

謝謝您的回答,先生。

這個'限制'進入主要查詢,而不僅僅是關係,例如,如果您搜索數以千計的'客戶'與最後'acct'在每個將無法正常工作,只會得到一個'客戶'。

補充...

爲了解決這個問題我使用子查詢,例如:

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報告。