Laravel belongsToMany relationship возвращает третий столбец

#php #laravel-4 #eloquent

#php #laravel-4 #красноречивый

Вопрос:

Я пытаюсь сохранить часть данных формы в сводной таблице. Это отлично работает при сохранении, но я не могу повторить третий столбец (активное логическое значение) при получении отношения.

 class _Event extends Eloquent {
    protected $table = 'events';

    public function groups()
    {
        return $this->belongsToMany('Group', 'events_groups', 'event_id', 'group_id');
    }
}

class Group extends Eloquent {
    public function events()
    {
        return $this->belongsToMany('_Event', 'events_groups', 'group_id', 'event_id')->where('events_groups.active', 1);
    }
}
  

Запуск a dd из (_Event::with('groups')->find($event_id)); меня :

 array(11) {
    ["id"] "1"
    ["groups"] array(2) {
        [0] array(4) {
            ["id"] "3"
            ["admin"] "0"
            ["pivot"] array(2) {
                ["event_id"] "1"
                ["group_id"] "3"
            }
        }
        [1] array(4) {
            ["id"] "4"
            ["admin"] "0"
            ["pivot"] array(2) {
                ["event_id"] "1"
                ["group_id"] "4"
            }
         }
    }
}
  

Моя БД настроена следующим образом (удаляются несвязанные столбцы) :

 events : id
groups : id - admin
events_groups : id - event_id - group_id - active
  

Как я могу также получить active столбец? `

Ответ №1:

Вам нужен withPivot() метод.

Из документации:

По умолчанию в сводном объекте будут присутствовать только ключи. Если ваша сводная таблица содержит дополнительные атрибуты, вы должны указать их при определении отношения:

 return $this->belongsToMany('Role')->withPivot('foo', 'bar');
  

Теперь атрибуты foo и bar будут доступны в нашем сводном объекте для ролевой модели.