С 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 эти типы дополнительных полей не требуют собственной модели, к ним могут быть доступны различные методы, описанные выше.
Я думаю, что это плохой выбор дизайна, чтобы добавить дополнительные поля в сводные таблицы. Сводные таблицы: это сводные таблицы. Если у них больше полей, то они не являются сводными таблицами, а сущностями и поэтому требуют наличия собственных классов моделей. – Aerendir
@Aerendir, я бы не согласился. Конечно, используются случаи для полей в сводных таблицах, если поля относятся к отношению, а не к сущности. Временные метки - большая. – Devon
@Devon, Да, но тогда вы создаете модель. По крайней мере, я никогда не видел дополнительных полей, используемых с ORM Manager (я использую Doctrine) и сводной таблицы: если мне нужны дополнительные поля, мне нужно создать класс модели. – Aerendir