[英]Nested select with left join in yii ActiveRecord
我有幾張桌子。 主表是contractors
並且具有鏈接表address
,其中有某種地址類型(1, 2, 3)
。 在進行LEFT JOIN ORDER BY type
時是必需的,因為在某些情況下,可以同時使用一種地址,1、2或3類型的地址,但是有時地址在字段type
中不是連續的。 我提出了一個滿足我要求的請求,但是無法在ActiveRecord中創建相同的查詢。
因此,我直接在數據庫中的請求如下所示:
SELECT t.id, addresses.address FROM contractor as t
LEFT JOIN (SELECT * FROM address ORDER BY address.type) as addresses
ON addresses.address != '' AND addresses.contractor_id = t.id
WHERE ((t.type='store') AND (t.name LIKE '%name%' OR addresses.address LIKE '%name%'))
GROUP BY t.id
在模型關系中,現在看起來:
public function relations(){
'addresses' => array(
self::HAS_MANY,
'Address',
'contractor_id',
'on' => "addresses.address != ''",
'order' => 'addresses.type ASC'
),
}
我想澄清一下:我只能使用ActiveRecord 。
我建議您使用這種簡單的方法
$criteria = new CDbCriteria;
$criteria->join = 'LEFT JOIN (SELECT * FROM address ORDER BY address.type) as addresses
ON addresses.address != "" AND addresses.contractor_id = t.id';
$criteria->condition = 't.type=:type AND (t.name LIKE :name OR addresses.address LIKE :name))';
$criteria->params = ['type'=>$type, 'name'=>'%'.$name.'%'];
$criteria->group = 't.id';
$models = Contractor::model()->findAll($criteria);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.