2014-01-18 6 views
2

Я работаю над проектом, который имеет много-много отношений между User и Club. Это соотношение работает, и я могу получить соответствующие объекты с помощью: $user->clubs. Сводная таблица, которую я назвал memberships. Я могу получить сводные данные с $club->pivot. Внешние ключи определены для таблицы memberships при миграции.Laravel: Как создать настраиваемую сводную модель?

Однако, я хотел бы сводную таблицу, чтобы быть представлен моделью, так что я могу легко обновить атрибуты Membership, такие как роль (или даже добавить Role модели в Membership!) Или status.

Я посмотрел на «Defining A Custom Pivot Model» в документации, но то, что он говорит, что не работает для меня, я получаю:

ErrorException Argument 1 passed to Illuminate\Database\Eloquent\Model::__construct() must be of the type array, object given

Я также посмотрел на this description, как это сделать это, но это более или менее то же самое, что и выше.

Membership модель:

class Membership extends Eloquent { 

protected $table = 'memberships'; 

public function user() 
{ 
    return $this->belongsTo('User'); 
} 

public function club() 
{ 
    return $this->belongsTo('Club'); 
} 
} 

Кто-нибудь делал это раньше?

+0

Я бы рекомендовал использовать надлежащую ORM, такую ​​как Doctrine2. У вас не будет ошибок, создающих новый Entity, потому что вы будете контролировать каждый бит, а не зависеть от самой Framework. –

+1

Мне очень нравится, как работает «Красноречивый». Я знаю, что я пытаюсь сделать, это может быть сделано (это в документах), просто проблема с работой. – Robin

+0

Вы пробовали Doctrine2? Это действительно приятно по сравнению с этим. У вас есть ваша Сущность и точно определяют, что она содержит в коде, вы делаете свои геттеры и сеттеры (возможно, присоединяете некоторые к событиям сохранения или обновления) и выполняете их. Вы оставляете всю свою конфигурацию отношений в аннотациях, Doctrine организует все для вас. Это означает, что вы можете просто создать новый Entity, не беспокоясь о том, как структура заполняет его или делает что-либо с ним. –

ответ

2

Это была решена с помощью suggestion by a reddit user расширить Pivot в моей Membership модели. Мне также пришлось добавить ->withPivot('status', 'role')->withTimestamps() в объявления отношений в моделях User and Club.

0

Вы можете сделать это, добавив некоторый ручной код.

Ваша модель членства выглядит нормально. Вы можете легко получить все клубы пользователя $, если вы определяете метод $ user-> clubs(), где вы получаете все клубы вручную.

clubs() { 
    $memberships=$this->memberships; 
    $clubs=new \Illuminate\Database\Eloquent\Collection(); 
    foreach($memberships as $m) { 
     $clubs=$clubs->merge($m->clubs); 
    } 
    return $clubs; 
} 
+0

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

Смежные вопросы