Фильтр по вычисляемому полю

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
kholerik
Сообщения: 15
Зарегистрирован: 2016.11.09, 11:33

Фильтр по вычисляемому полю

Сообщение kholerik »

Ok, Как отфильтровать по связанному полю разобрались

Например в модели ProductSearch это как-то так:

Код: Выделить всё

$query->andFilterWhere(['like', 'vendor.name', $this->vendor]);
А вот если вместо vendor.name, я хочу поставить вычисляемое значение? Например, из модели Product

Код: Выделить всё

    function getCountOrders() 
    {
        return Order::find()->where(['product_id' => $this->id])->count(); 
    }
mkramer
Сообщения: 531
Зарегистрирован: 2014.12.14, 13:02

Re: Фильтр по вычисляемому полю

Сообщение mkramer »

Подзапросы + having.

Код: Выделить всё

$subquery = (new Query)->select([new Expression("count(1) as c")])->from("order")->where(["=", "order.product_id", "product.id"]);

$products = Product::find()->select(["product.*", "c" => $subquery])->having([">", "c", 10])->all();
[/php]
Ну как-то так должно выглядеть. Идея, надеюсь, понятна
Аватара пользователя
kholerik
Сообщения: 15
Зарегистрирован: 2016.11.09, 11:33

Re: Фильтр по вычисляемому полю

Сообщение kholerik »

За Having большое спасибо! Погуглил-погуглил и сделал так

Код: Выделить всё

        
        $query = (new Query)
            ->select(['customer.*', 'date_last_order' => 'order.at_date'])
            ->from('customer')
            ->leftJoin('order', 'order.customer_id = customer.id')
            ->having([">", "order.at_date", 0])
        
Выбрал всех покупателей, дата заказа которых больше 0 (ну вы поняли)
Ответить