2016-08-17 77 views

回答

1

我認爲這將工作:

解決方案1 ​​

定義關係,您Orders型號:

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getParent() 
{ 
    return $this->hasOne(Orders::className(), ['order_id' => 'parent_id']); 
} 

/** 
* @return \yii\db\ActiveQuery 
*/ 
public function getOrders() 
{ 
    return $this->hasMany(Orders::className(), ['parent_id' => 'order_id']); 
} 

然後你就可以運行如下:

$data = Orders::find() 
     ->from('orders orders') 
     ->joinWith('parent parent') 
     ->where(['parent.order_id' => 14054]) 
     ->all(); 

它產生的SQL是:

SELECT `orders`.* 
FROM `orders` `orders` 
LEFT JOIN `orders` parent 
ON `orders`.`parent_id` = `parent`.`order_id` 
WHERE `parent`.`order_id`= 14054 

解決方案2

沒有關係,你可以在你的東西是這樣的:

$sub_query = Orders::find() 
     ->select(['order_id']) 
     ->where(['order_id' => 14054]); 
$query = Orders::find()->where(['in', 'parent_id', $sub_query]); 
$data = $query->all(); 

解決方案3

使用嵌套查詢:

$sub_query = Orders::find() 
     ->select(['order_id']) 
     ->where(['order_id' => 14054]); 
$query = Orders::find() 
     ->from('orders orders'); 
$query->innerJoin(['parent' => $sub_query], 'orders.parent_id = parent.order_id'); 
$data = $query->all(); 

產生的SQL如下:

SELECT `orders1`.* 
FROM `orders` `orders1` 
INNER JOIN (
    SELECT `order_id` FROM `orders` WHERE `order_id` = 14054 
) `parent` 
ON orders.parent_id = parent.order_id 

解決方案4

我認爲這也是下面的工作太:

定義新inverted關係在Orders模型:

public function getOrders1() 
    { 
     return $this->hasMany(Orders::className(), ['parent_id' => 'order_id'])->inverseOf('orders'); 
    } 

現在運行查詢:

$data = Orders::find() 
     ->with(['orders1']) 
     ->all(); 

更多關於倒置關係here