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;
}
大きな違いの1つは、渡すモデルを保存することです。つまり、基本的に新しい役割を作成したり、古い役割を更新したりすることができます。たとえば、
// 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]);
ロールテーブルに存在しないユーザーに新しいロールを保存すると、ロールデータベースに新しいロールレコードが作成されますか?だから基本的にsave()を使ってもエラーは出ませんが、もしroleが存在しなければattach()を使うと外部キーエラーが出るでしょうか? – alaboudi
@alaboudiある意味では、そうですが、モデルの新しいインスタンスを渡すと、 'attach()'はエラーをスローしません。モデルがデータベースに存在しないため、何も付けられません。しかし、 'save()'はデータベースが存在しない場合は最初にデータベースに保存するか、更新前に更新する必要がある場合は更新する必要がある場合には追加します。 –
すばらしい答え – alaboudi