Запрос с leftJoin

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
nihaha
Сообщения: 95
Зарегистрирован: 2017.02.12, 13:30

Запрос с leftJoin

Сообщение nihaha »

Подскажите, пожалуйтса, как правильно составить запрос с двумя условиями:
Выбрать все, где status = 1, присоединить таблицу и учесть условие category_id = id.
Пытаюсь делать так, но выбираются все материалы, без учета status.

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

$query = Product::find()
    ->where(['status' => '1'])
    ->joinWith('category')
    ->where(['category_id' => $id]);

$pages = new Pagination([
    'totalCount' => $query->count(),
    'pageSize' => '8',
    'pageSizeParam' => false,
    'forcePageParam' => false,
]);

$products = $query->offset($pages->offset)->limit($pages->limit)->all();
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Запрос с leftJoin

Сообщение rak »

вместо where нужно использовать andWhere

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

$query = Product::find()
    ->andWhere(['status' => '1'])
    ->joinWith('category')
    ->andWhere(['category_id' => $id]);
ну или же просто

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

$query = Product::find()
    ->andWhere(['status' => '1', 'category_id' => $id])
    ->joinWith('category');
Аватара пользователя
mat.twg
Сообщения: 222
Зарегистрирован: 2012.02.22, 20:44
Откуда: Санкт-Петербург

Re: Запрос с leftJoin

Сообщение mat.twg »

Либо запросы строй с http://www.yiiframework.com/doc-2.0/yii-db-query.html
Аватара пользователя
nihaha
Сообщения: 95
Зарегистрирован: 2017.02.12, 13:30

Re: Запрос с leftJoin

Сообщение nihaha »

rak писал(а): 2017.02.26, 17:15 вместо where нужно использовать andWhere

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

$query = Product::find()
    ->andWhere(['status' => '1'])
    ->joinWith('category')
    ->andWhere(['category_id' => $id]);
ну или же просто

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

$query = Product::find()
    ->andWhere(['status' => '1', 'category_id' => $id])
    ->joinWith('category');
Такой вариант не работает, т.к. у таблицы product и у таблицы category есть поля status.
Решилось явным указанием таблицы для выбора статуса:

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

$query = Product::find()
            ->andWhere(['product.status' => '1', 'category_id' => $id])
            ->joinWith('category');
Спасибо за подсказу.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Запрос с leftJoin

Сообщение rak »

ну вообще тогда лучше алиас задавать, чтобы имя таблицы все время не писать
Ответить