最近在老家無法上網,這個問題一直都沒有解決。默認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也不識別而報錯了.
文檔說scope的字段要消除歧義,但我沒有找到一個完美的解決辦法,除了定義alias之外還有別的么?
慕碼人2483693
2023-04-08 18:14:44