Laravel 5 - Многие ко многим - Прикрепить или Сохранить


У меня очень много отношений между двумя моделями, пользователями и ролями. Есть ли разница между сохранением отношения с помощью метода save() и использованием метода attach()?

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

Являются ли эти два понятия эквивалентными? Лично я не вижу разницы. Мысли?

Author: alaboudi, 2016-03-02

1 answers

Вот фрагмент кода для метода save(). Вы увидите, что в конце концов это вызовет attach().

/**
 * Save a new model and attach it to the parent model.
 *
 * @param  \Illuminate\Database\Eloquent\Model  $model
 * @param  array  $joining
 * @param  bool   $touch
 * @return \Illuminate\Database\Eloquent\Model
 */
public function save(Model $model, array $joining = [], $touch = true)
{
    $model->save(['touch' => false]);
    $this->attach($model->getKey(), $joining, $touch);
    return $model;
}

Одно большое отличие заключается в том, что он также сохраняет модель, которую вы ему передаете. Другими словами, вы можете по существу создать новую роль (или даже обновить старую), одновременно прикрепляя ее к пользователю. Например:

// Get the user
$user = User::first();

// Instantiate a new role
$role = new Role($attributes);

// Creates the role / persists it into the database and attaches this role to the user
$user->roles()->save($role, ['expires' => $expires]);
 11
Author: Thomas Kim, 2016-03-02 20:05:30