Страница 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
Спасибо, буду пробовать.