2017-01-06 8 views
1

Я пишу API с каркасом MVC в PHP, и я использую Eloquent ORM.Должны ли в некоторых таблицах отношений свои модели?

Мое приложение имеет некоторые модели, которые в конечном итоге связаны через таблицы отношений, но предназначены для создания в отдельном децентрализованном порядке.

Должны ли эти таблицы взаимоотношений иметь свои собственные модели, или же модели, связанные с ними, имеют методы создания ссылок?

+0

Я думаю, что это плохой выбор дизайна, чтобы добавить дополнительные поля в сводные таблицы. Сводные таблицы: это сводные таблицы. Если у них больше полей, то они не являются сводными таблицами, а сущностями и поэтому требуют наличия собственных классов моделей. – Aerendir

+0

@Aerendir, я бы не согласился. Конечно, используются случаи для полей в сводных таблицах, если поля относятся к отношению, а не к сущности. Временные метки - большая. – Devon

+0

@Devon, Да, но тогда вы создаете модель. По крайней мере, я никогда не видел дополнительных полей, используемых с ORM Manager (я использую Doctrine) и сводной таблицы: если мне нужны дополнительные поля, мне нужно создать класс модели. – Aerendir

ответ

1

С Eloquent, в отношении промежуточных или сводных таблиц со многими-многими отношениями, вам не нужно создавать дополнительную модель.

Вы всегда должны установить отношения для родственных моделей с помощью метода belongsToMany(), описываемая здесь: https://laravel.com/docs/5.3/eloquent-relationships#many-to-many

class User extends Model 
{ 
    /** 
    * The roles that belong to the user. 
    */ 
    public function roles() 
    { 
     return $this->belongsToMany('App\Role'); 
    } 
} 

Они имеют различные методы, то с помощью этого отношения к добавления или обновления элементов в сводной таблице в том числе и прикрепить к нему, отрывать или синхронизации, описываемая здесь: https://laravel.com/docs/5.3/eloquent-relationships#updating-many-to-many-relationships

$user = App\User::find(1); 
$user->roles()->attach($roleId); 

Вы также можете добавить данные дополнительных полей:

$user->roles()->attach($roleId, ['expires' => $expires]); 

Дополнительные поля на сводной таблице важны, когда у вас есть данные, такие как временные метки, которые связаны с отношением, а не с соответствующими моделями.

Пример, который я мог бы подумать, если вы хотите сохранить историю менеджеров магазинов. Вам просто не нужны store_id и manager_id, вам также нужна отметка start_at и end_at. Это позволит вам просматривать, кто сейчас управляет магазином, но также и кто управлял магазином в прошлом.

С Eloquent эти типы дополнительных полей не требуют собственной модели, к ним могут быть доступны различные методы, описанные выше.

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

  • Нет связанных вопросов^_^