2014-08-31 71 views
1

我需要在JOIN語句中定義更多條件。 我怎樣才能讓這Yii2用的hasMany關係?:Yii2 hasMany在join語句中有很多條件

... LEFT JOIN命令ON(customer.id = order.customer_id和orders.position = 1)...

我有一個用於GridView的DataProvider。它看起來像這樣:

... 
public function search($params) 
{ 
    $query = Customer::find() 
     ->joinWith('orders'); 

    $dataProvider = new ActiveDataProvider([ 
     'query' => $query, 
    ]); 
    return $dataProvider; 
} 
... 

型號:

... 
public function getFirstOrder() 
{ 
    $query = $this->hasMany(Orders::className(), ['customer_id' => 'id']); 
    return $query; 
} 
... 

它甚至有可能?

+0

你可以寫MySQL查詢在創建命令 – Kshitiz 2014-09-18 06:55:02

+0

我敢肯定,在這一點上因爲[Yii2中的錯誤](https://github.com/yiisoft/yii2/issues/6792),沒有辦法。 – 2015-01-08 13:32:55

回答

1
public function search($params){ 


    $activeDataProvider = new ActiveDataProvider([ 
             "query" => Customer::find() 
                ->joinWith('orders') 
           ]); 

    // Valdate the search $params. 

    // Build your query depending on search params. I am assuming we get key => value pair in params 

    foreach($params as $key => $value){ 

     $activeDataProvider->query->andWhere("`$key` = '$value'");   

    } 

    return $activeDataProvider; 

} 

我希望可以幫助你:)

您還可以使用預覽生成的SQL:

$command = $activeDataProvider->query->createCommand(); 
    print_r ($command->sql);