亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

文檔說scope的字段要消除歧義,但我沒有找到一個完美的解決辦法,除了定義alias之外還有別的么?

文檔說scope的字段要消除歧義,但我沒有找到一個完美的解決辦法,除了定義alias之外還有別的么?

PHP
慕碼人2483693 2023-04-08 18:14:44
最近在老家無法上網,這個問題一直都沒有解決。默認yii中ar查詢是可以不使用with的,這樣會使用延遲加載功能進行對象關聯查詢,很方便,但是帶來了效率問題。所以考慮使用with進行預加載,但是每當我使用with時就會出現sql錯誤,查看了error之后發現是因為relations里添加的order,condition,on等條件在生成最終的sql時不會自動加上表別名。希望有了解的同學能提供一下解決辦法。--------------------------------------這么說可能大家不太明白,我詳細說明一下.假設結構如下:class CategoryModel{  function relations() {    return array(        'description' => array(self::HAS_ONE,'CategoryDescription','category_id'),     );   }  function defaultScope() {    return array(      'condition' => 'language=1',      'order'     => 'created desc',     );   } }class CategoryDescriptionModel{ }class SiteModel{  function relations() {    return array(        'description' => array(self::HAS_ONE,'SiteDescription','site_id'),        'category' => array(self::BELONGS_TO,'Category','category_id'),     );   }  function defaultScope() {    return array(      'condition' => 'language=1',      'order'     => 'created desc',     );   } }class SiteDescriptionModel{ }那么當使用with的時候,created desc會出現歧義,比如.Site::model()->count(); Site::model()->with('description')->findAll(); Site::model()->with('description','category','category.description');上面后兩個語句中的created desc就會成為語法錯誤,因為Yii進行了join之后會給表增加alias,所以沒有alias的字段名無法識別.之后我嘗試和給所有的model定義alias,然后將scope中的order改為alias.created desc.但是產生了另一個問題,就是在count()的時候是沒有Join操作的,所以alias.created desc也不識別而報錯了.
查看完整描述

1 回答

?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

要用$criteria = new CDbCriteria(); 才可以完美解決

查看完整回答
反對 回復 2023-04-10
  • 1 回答
  • 0 關注
  • 123 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號