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

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

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

Сообщение alex.kot » 2019.04.05, 15:52

Добрый день.
Наткнулся с проблемой что не работает 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 » 2019.04.09, 11:41

Неужели никто не знает?(

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

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

Сообщение kawabanga » 2019.04.09, 13:58

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


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

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

Сообщение alex.kot » 2019.04.09, 17:04

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

Аватара пользователя
proctoleha
Сообщения: 276
Зарегистрирован: 2016.07.10, 19:00

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

Сообщение proctoleha » 2019.04.09, 17:20

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 » 2019.04.09, 17:30

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

Аватара пользователя
Seagull
Сообщения: 31
Зарегистрирован: 2019.01.24, 20:00

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

Сообщение Seagull » 2019.04.09, 17:56

Это так не сработает. Кинул ссылку, там всё разжевали.
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 » 2019.04.10, 11:33

Надо получается самому запрос отдельный писать?

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

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

Сообщение SiZE » 2019.04.10, 11:54

откройте дебагер и посмотрите какие запросы формируются, потом почитайте про жадную загрузку и будет счастье.
в поиске работы

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

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

Сообщение alex.kot » 2019.04.10, 14:54

Наконец то понял почему не работает, но не понял как реализовать задуманное)

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

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

Сообщение SiZE » 2019.04.10, 18:33

для начала написать чистый запрос
в поиске работы

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

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

Сообщение alex.kot » 2019.04.11, 11:14

Вроде так: $authors = Yii::$app->db->createCommand('SELECT * FROM authors JOIN books ON authors.id = books.author_id')->queryAll();

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

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

Сообщение SiZE » 2019.04.11, 12:13

а зачем тогда нужен был $query->limit(2); ?
в поиске работы

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

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

Сообщение alex.kot » 2019.04.11, 13:01

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


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

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

Сообщение alex.kot » 2019.04.11, 15:19

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

Ответить