Yii2 hasMany со многими условиями в операторе соединения

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

... LEFT JOIN заказы ON (customer.id = order.customer_id AND 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;
}
...

Это вообще возможно?


person Joe Johnson    schedule 31.08.2014    source источник
comment
вы можете написать запрос mysql в команде создания   -  person Kshitiz    schedule 18.09.2014
comment
Я почти уверен, что на данный момент нет способа из-за ошибки в Yii2 .   -  person Joe Meyer    schedule 08.01.2015


Ответы (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);
person Rx Seven    schedule 05.09.2014