Не работает запрос with с функцией limit

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
alex.kot
Сообщения: 9
Зарегистрирован: 2019.04.05, 15:49

Не работает запрос with с функцией limit

Сообщение alex.kot »

Добрый день.
Наткнулся с проблемой что не работает limit в функции.

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

        $authors = Author::find()->with([
            'books' => function ($query) {
                $query->limit(2);
            },
        ])->asArray()->all();
Напишите пожалуйста как можно исправить.
alex.kot
Сообщения: 9
Зарегистрирован: 2019.04.05, 15:49

Re: Не работает запрос with с функцией limit

Сообщение alex.kot »

Неужели никто не знает?(
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Не работает запрос with с функцией limit

Сообщение kawabanga »

Да все знают. Но как вы его представляете на языке sql? что-то подобное будет работать только с отложенной загрузкой.
alex.kot
Сообщения: 9
Зарегистрирован: 2019.04.05, 15:49

Re: Не работает запрос with с функцией limit

Сообщение alex.kot »

kawabanga писал(а): 2019.04.09, 13:58 Да все знают. Но как вы его представляете на языке sql? что-то подобное будет работать только с отложенной загрузкой.
Можно по подробнее?
Аватара пользователя
proctoleha
Сообщения: 298
Зарегистрирован: 2016.07.10, 19:00

Re: Не работает запрос with с функцией limit

Сообщение proctoleha »

alex.kot писал(а): 2019.04.09, 17:04
kawabanga писал(а): 2019.04.09, 13:58 Да все знают. Но как вы его представляете на языке sql? что-то подобное будет работать только с отложенной загрузкой.
Можно по подробнее?
Выложите, для начала, рабочий запрос на языке sql, который вы хотите исполнить
Вот за что я не люблю линукс, так это за свои кривые, временами, руки
alex.kot
Сообщения: 9
Зарегистрирован: 2019.04.05, 15:49

Re: Не работает запрос with с функцией limit

Сообщение alex.kot »

К сожалению в sql запросах не силен, надо получить первые 2 элемента с таблицы books, связанные с таблицей authors.
Аватара пользователя
Seagull
Сообщения: 31
Зарегистрирован: 2019.01.24, 20:00

Re: Не работает запрос with с функцией limit

Сообщение Seagull »

Это так не сработает. Кинул ссылку, там всё разжевали.
zelenin писал(а): 2016.06.09, 20:58 ни with ни joinWith не делает жадную загрузку в том виде, в котором вы хотите.
жадная в том смысле, что при итерации $blogCategorisTable->posts у вас не по одному запросу на каждый post будет, а один на все post'ы.
то есть 1 запрос на саму модель и один запрос на все связанные posts.
в joinWith отличие от with в join в запросе.
with: select * from blog_categories where id = 1
joinWith:select * from blog_categories join post on post.categories_id = blog_categories.id where blog_categories.id = 1

типа того
alex.kot
Сообщения: 9
Зарегистрирован: 2019.04.05, 15:49

Re: Не работает запрос with с функцией limit

Сообщение alex.kot »

Надо получается самому запрос отдельный писать?
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Не работает запрос with с функцией limit

Сообщение SiZE »

откройте дебагер и посмотрите какие запросы формируются, потом почитайте про жадную загрузку и будет счастье.
alex.kot
Сообщения: 9
Зарегистрирован: 2019.04.05, 15:49

Re: Не работает запрос with с функцией limit

Сообщение alex.kot »

Наконец то понял почему не работает, но не понял как реализовать задуманное)
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Не работает запрос with с функцией limit

Сообщение SiZE »

для начала написать чистый запрос
alex.kot
Сообщения: 9
Зарегистрирован: 2019.04.05, 15:49

Re: Не работает запрос with с функцией limit

Сообщение alex.kot »

Вроде так: $authors = Yii::$app->db->createCommand('SELECT * FROM authors JOIN books ON authors.id = books.author_id')->queryAll();
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Не работает запрос with с функцией limit

Сообщение SiZE »

а зачем тогда нужен был $query->limit(2); ?
alex.kot
Сообщения: 9
Зарегистрирован: 2019.04.05, 15:49

Re: Не работает запрос with с функцией limit

Сообщение alex.kot »

Я пытался ограничить вывод из таблицы books, но не для авторов.
Мне надо было получить список всех авторов с первыми двумя книгами этих авторов.
alex.kot
Сообщения: 9
Зарегистрирован: 2019.04.05, 15:49

Re: Не работает запрос with с функцией limit

Сообщение alex.kot »

Спасибо, буду пробовать.
Ответить