欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Laravel 5 - Many to Many - Attach versus Save

I have a many to many relationship between two models, users and roles. Is there a difference between saving a relationship using the save() method and using the attach() method?

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

Are the two equivalent? I personally dont see the difference. Thoughts?

1 Answer 正确答案

Here is the snippet of code for the save() method. You'll see that it eventually calls 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);  ($touch 应该是更新关联表的时间戳)
    return $model;
}

One big difference is that it also saves the model that you are passing to it. In other words, you can essentially create a new role (or even update the old one) while also attaching it to the user. For example:

// 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]);

    来自  https://stackoverflow.com/questions/35756469/laravel-5-many-to-many-attach-versus-save


    普通分类: