簡體   English   中英

yii ActiveRecord中帶有左連接的嵌套選擇

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM