Active Record, limit и вложенные связи
Active Record, limit и вложенные связи
Есть связь Customer и Order один ко многим
Есть связь Order и Item один ко многим
Я хочу выбрать объект Customer и его 10 объектов Order, а у каждого выбранного объекта Order я хочу выбрать по 10 объектов Item. Как это можно сделать в Yii ? Можно пример? В доках не нашел.
Есть связь Order и Item один ко многим
Я хочу выбрать объект Customer и его 10 объектов Order, а у каждого выбранного объекта Order я хочу выбрать по 10 объектов Item. Как это можно сделать в Yii ? Можно пример? В доках не нашел.
Re: Active Record, limit и вложенные связи
Не понял? Я хочу указать limit для реляций в момент выборки Customer. По докам ясно, как это можно сделать для реляции первого уровня, а как сделать для вложенных реляций непонятно. Хочу понять умеет это делать фреймворк или нет.
Хочу чтобы этот запрос возвращал 10 orders и у каждого order возвращал по 10 items. Причем limit хочу указать именно в запросе (не в модели). Как это сделать?
Код: Выделить всё
$customers = Customer::find()->with('orders.items')->all();
Re: Active Record, limit и вложенные связи
когда советовал думал чтоб вы добавили или в модель или в анонимную ф-цию
... но протестировав понял что не получится никак ...
т.к. выборка идет массово для всех Customer через in ...
только если вытаскивать для каждого по отдельности ...
Код: Выделить всё
$query = Products::find();
$query->with(['configs'=>function($query){
$query->limit(2);
}]);
$query->all();
т.к. выборка идет массово для всех Customer через in ...
только если вытаскивать для каждого по отдельности ...
я даже такого решения не вижу ... поделитесь ?По докам ясно, как это можно сделать для реляции первого уровня
Re: Active Record, limit и вложенные связи
Я думал, что через анонимную функцию можно сделать лимит для реляции первого уровня. Но сейчас, когда вы написали, понял, что для реляций невозможно сделать limit в текущей реализации ORM.я даже такого решения не вижу ... поделитесь ?
Re: Active Record, limit и вложенные связи
поэтому если у вас 5 Customer и 100000 orders тогда лучше доставать отдельными запросами ...
а если не так уже много orders то просто при выводе выводите последние 10 ... а запрос пусть уже все достает ...
а если не так уже много orders то просто при выводе выводите последние 10 ... а запрос пусть уже все достает ...
-
- Сообщения: 977
- Зарегистрирован: 2014.08.27, 21:54
Re: Active Record, limit и вложенные связи
Могу ошибаться, а не пробовали в самом relation указать лимит и с ним потом делать связь
Код: Выделить всё
public function getItems(){
return $this->hasMany(Order::className(), ['id'=>'order_id']);
}
public function getItemsLimit($count = 10){
return $this->getItems()->limit($count)
}
Код: Выделить всё
$customers = Customer::find()->with('orders.itemsLimit')->all();
Последний раз редактировалось Loveorigami 2016.11.16, 16:24, всего редактировалось 2 раза.
Re: Active Record, limit и вложенные связи
прочтите ветку. в ней есть утверждения, что: а) такой способ не работает, б) такой способ не подходит.Loveorigami писал(а):Могу ошибаться, а не пробовали в самом relation указать лимит и с ним потом делать связь
Код: Выделить всё
public function getItemsLimit($count = 100){ return $this->hasMany(Order::className(), ['id'=>'order_id']) ->limit($count) }
Код: Выделить всё
$customers = Customer::find()->with('orders.itemsLimit')->all();
Re: Active Record, limit и вложенные связи
я сам почемуто не подумал логически когда давал первый ответ .. .такой способ работает но только НЕ в with ... а если по одному ...Loveorigami писал(а):Могу ошибаться, а не пробовали в самом relation указать лимит и с ним потом делать связь
Код: Выделить всё
public function getItemsLimit($count = 10){ return $this->hasMany(Order::className(), ['id'=>'order_id']) ->limit($count) }
Код: Выделить всё
$customers = Customer::find()->with('orders.itemsLimit')->all();
наглядно:
у вас есть users и orders ...
когда вы сделаете Users::find()->with('orders')->all()
у вас будет доставаться select * from orders where user_id in (1,2,3,4,5,6,7) limit 10 и ваш лимит отлимитит не для каждого по 10 .. а для всех 10 штук ...
Re: Active Record, limit и вложенные связи
caHek2x, я хотел подсмотреть реализацию этой фичи в yii, чтобы взять в свою простенькую data mapper orm на nodejs под монго. Я хочу собирать доменные объекты Customer и я не хочу собирать их руками, я хочу, чтобы это делала за меня orm. Я лишь хочу сказать, с какими зависимостями и в каком количестве.
Re: Active Record, limit и вложенные связи
В яндексе первый результат, есть ответ на вопрос http://web-sprints.ru/yii2-activerecord-model/
Re: Active Record, limit и вложенные связи
это вообще к чему ? вы наверно не поняли что хочет ТСMorr123 писал(а):В яндексе первый результат, есть ответ на вопрос http://web-sprints.ru/yii2-activerecord-model/
Re: Active Record, limit и вложенные связи
У меня та же проблема, нужно сделать limit(2), иначе получает несколько тысяч записей, на хостинге иногда даже памяти не хватает.
Как-то можно это решить средствами yii2?
Как-то можно это решить средствами yii2?