1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Laravel】モデルで更新日(updated_at)のみ更新する

Posted at

答え

touch()メソッドを使います。たとえば、下記のようにします。

Laravel
$item = Post::find(1);
$item->touch();

上記コードによって下記のクエリーが実行されます。

SQL
update posts set updated_at = '2022-08-15 09:21:04' where id = 1

使いどころ

下記のようなリレーションのテーブルがあったとします。
テーブル例
postsは記事テーブル、tagsは記事に関連するタグテーブルと考えてください。

管理画面で

  • タイトル
  • 内容
  • 関連タグ

を編集する機能にて、タイトルと内容はそのままで関連タグのみ変更する場合、下記のようなコードではpostsのupdated_atが更新されません。

Laravel
$item = Post::find($request->id);
$item->title = $request->title;
$item->contents = $request->contents;
item->save();

記事の一覧画面が更新順に表示されるようになっている場合、さっき更新したのに一番上にあがってこない、なんで??、という状況になります。

そこでtouch()です。

Laravel
$item = Post::find($request->id);
$item->title = $request->title;
$item->contents = $request->contents;
$item->save();
$item->touch();

ちなみに save() で updated_at が更新された場合(つまりタイトルか内容が更新された場合)は touch() による UPDATEクエリーは発行されません。

さすがLaravelといったところです。

別案

update() であれば内容が変わっていなくても update_at を更新することができます。

Laravel
Post::where('id', $request->id)
    ->update([
        'title' => $request->title,
        'contents' => $request->contents,
    ]);
1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?