Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 28.09.2014 12:19:54

Выборка из связанных таблиц

День добрый, имею 4 таблицы:


obj
id
item_id

items
id
name
description

items_options
id
name

items_options_value
id
item_id
option_id
value

Подскажите, я совсем запутался, как мне из модели obj выбрать items со всеми items_options_value принадлежащих items

Не в сети

#2 28.09.2014 12:49:30

Re: Выборка из связанных таблиц

а самое главное как в дальнейшем сделать выборку obj по ключам value из items_options_value

Не в сети

#3 28.09.2014 13:09:23

Re: Выборка из связанных таблиц

Упростите себе задачу - сделайте выборку из таблицы items_options_value. Тогда все отношения будут belongsTo (меньше запросов), а условия запроса будут реализовываться проще...

Не в сети

#4 28.09.2014 17:33:42

Re: Выборка из связанных таблиц

Что то я совсем запутался, а как бы это выглядело? а если в items_options_value не будет записей?

Не в сети

#5 28.09.2014 18:54:31

Wide

Re: Выборка из связанных таблиц

Obj hasMany Items
Items hasMany Items_options_value

Obj::with('items.items_options_values')

http://laravel.com/docs/4.2/eloquent#one-to-many

#6 28.09.2014 19:00:25

Wide

Re: Выборка из связанных таблиц

Obj::with('items.values')

class Obj extends Eloquent {

    public function items()
    {
        return $this->hasMany('Items');
    }

}
class Items extends Eloquent {

    public function values()
    {
        return $this->hasMany('Items_options_values');
    }

}

#7 28.09.2014 19:27:42

Wide

Re: Выборка из связанных таблиц

В items только obj_id нужен.

#8 29.09.2014 09:09:37

Re: Выборка из связанных таблиц

Сергей пишет:

Что то я совсем запутался, а как бы это выглядело? а если в items_options_value не будет записей?

Прошу пардон - упустил, что obj имеет item.

В таком случае, вопрос поставлен некорректно. Отношение Obj и Item - N:1. То есть, у Obj только один Item. "Из модели obj выбрать items со всеми items_options_value принадлежащих items" не получится, так как на один obj - один item.

Если же Вы хотите получить все options для набора Item, который связан с Obj, тогда Вам опять-таки, как я писал, можно пойти от таблицы items_options_value. А именно, Вы получаете нужные Obj по требуемым условиям (в результате у Вас будут item_id). Далее, делаете выборку из items_options_value по имеющимся ключам item_id.

В целом, можно обойтись и одним запросом, вставив первый запрос в условие на выборку по item_id второго запроса. В итоге, у Вас будет один запрос и возможность получить все связанные свойства нужных объектов...

Практическую реализацию данного подхода, думаю, сможете почерпнуть из примеров, мануалов, либо подсказок ниже?

Изменено SMGladkovskiy (29.09.2014 09:13:33)

Не в сети

#9 29.09.2014 22:10:03

Re: Выборка из связанных таблиц

Большое спасибо!

Не в сети

Подвал раздела