2014-08-31 2 views
1

Мне нужно определить больше условий в инструкции JOIN. Как я могу сделать это в Yii2 с hasMany отношения ?:Yii2 hasMany со многими условиями в заявлении о соединении

... LEFT JOIN заказов ON (customer.id = order.customer_id И orders.position = 1) ...

У меня есть DataProvider для GridView. Это выглядит следующим образом:

... 
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

+0

я уверен, что на данный момент во времени нет пути из-за [ошибка в Yii2] (https://github.com/yiisoft/yii2/issues/6792). –

ответ

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); 
Смежные вопросы