4
10

More than 1 year has passed since last update.

Laravel 更新処理の違い(save, update, create, associate, attach, detach)

Last updated at Posted at 2021-10-31

はじめに

データの登録や更新に用いる各メソッドを記載しています。主に違いが分かるように記載しています。
シンプルに書いてますので、実際に業務で使用する際は若干書き方が違うと思います。
詳しい説明は別の記事を参照して下さい。

目次

  1. save
  2. update
  3. create
  4. associate
  5. attach / detach

save

インスタンスを作成して、データを挿入後、save( )で保存する。

$user = new User();
$user->name = $request->name;
$user->save();

update

saveとほぼ同じですが、違いは以下の通りです。

save( )
nameカラムの内容を更新する際に、挿入されるデータが更新前と同じものであれば、updated_atのカラムが更新されない。

update( )
nameカラムの内容を更新する際に必ずupdated_atのカラムが更新される。

$user = new User();
$user->name = $request->name;
$user->update();

create

こちらはインスタンス化からデータ保存を一括で実行できます。

$user = App\Model\User::create(['name' => $request->name]);

associate

そのユーザーに紐ずく、postsテーブルのuser_idカラムを更新する。一対多のリレーションで使用する。
※この場合、Postモデル内にあるbelongsToの第二引数であるuser_idを更新する。

// $userの部分は、レコードではなく、user_id(idの数字)を入れるだけでもいけると思います・・・たぶん
$user = User::find(1);
$post->user()->associate($user)->save();
// Post.phpファイル
public function user()
{
 return $this->belongsTo('App\Models\User', 'user_id');
}

attachとdetach

attach( )
中間テーブルに一括で登録できる。
この場合は「ユーザー」に紐ずく「複数の趣味」を一括でDBに保存出来る。

$user->hobbies()->attach($request->hobbies);

detach( )
中間テーブルを一括で削除できる。
引数を指定しない場合は、その「ユーザー」に紐ずく「全ての趣味」が中間テーブルから削除される。

$user->hobbies()->detach();

※中間テーブルの更新は他sync( )やupdateExistingPivot等がありますが、ここでは説明を割愛します。

4
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10