Страница 1 из 1

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

Добавлено: 2019.04.05, 15:52
alex.kot
Добрый день.
Наткнулся с проблемой что не работает limit в функции.

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

        $authors = Author::find()->with([
            'books' => function ($query) {
                $query->limit(2);
            },
        ])->asArray()->all();
Напишите пожалуйста как можно исправить.

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

Добавлено: 2019.04.09, 11:41
alex.kot
Неужели никто не знает?(

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

Добавлено: 2019.04.09, 13:58
kawabanga
Да все знают. Но как вы его представляете на языке sql? что-то подобное будет работать только с отложенной загрузкой.

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

Добавлено: 2019.04.09, 14:13
Seagull

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

Добавлено: 2019.04.09, 17:04
alex.kot
kawabanga писал(а): 2019.04.09, 13:58 Да все знают. Но как вы его представляете на языке sql? что-то подобное будет работать только с отложенной загрузкой.
Можно по подробнее?

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

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

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

Добавлено: 2019.04.09, 17:30
alex.kot
К сожалению в sql запросах не силен, надо получить первые 2 элемента с таблицы books, связанные с таблицей authors.

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

Добавлено: 2019.04.09, 17:56
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

типа того

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

Добавлено: 2019.04.10, 11:33
alex.kot
Надо получается самому запрос отдельный писать?

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

Добавлено: 2019.04.10, 11:54
SiZE
откройте дебагер и посмотрите какие запросы формируются, потом почитайте про жадную загрузку и будет счастье.

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

Добавлено: 2019.04.10, 14:54
alex.kot
Наконец то понял почему не работает, но не понял как реализовать задуманное)

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

Добавлено: 2019.04.10, 18:33
SiZE
для начала написать чистый запрос

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

Добавлено: 2019.04.11, 11:14
alex.kot
Вроде так: $authors = Yii::$app->db->createCommand('SELECT * FROM authors JOIN books ON authors.id = books.author_id')->queryAll();

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

Добавлено: 2019.04.11, 12:13
SiZE
а зачем тогда нужен был $query->limit(2); ?

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

Добавлено: 2019.04.11, 13:01
alex.kot
Я пытался ограничить вывод из таблицы books, но не для авторов.
Мне надо было получить список всех авторов с первыми двумя книгами этих авторов.

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

Добавлено: 2019.04.11, 13:59
SiZE

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

Добавлено: 2019.04.11, 15:19
alex.kot
Спасибо, буду пробовать.