Laravel8 リレーションを同時にupdateするpushメソッドの使い方

■前提条件

こんなリレーションがあったとして

members             articles
    id -----┐        id
    m_flg   └------- member_id
                     a_flg 

membersテーブルとarticlesテーブルを同時にupdateしたい場合、save()を使うと親テーブルと子テーブルで2回save()をしなければならない。

$articles = Article::findOrFail(1);
$articles->a_flg = 1;
$articles->save();

$member = $articles->member;
$member->m_flg = 1;
$member->save();

しかし、put()を使うと同時に更新できる。

$article = Article::findOrFail(1);
$article->a_flg = 1;
$article->member->m_flg = 1;
$article->push();

これはarticlesテーブルからmembersテーブルのbelongsTo()のケースだけど、membersテーブルからarticlesテーブルのhasMany()の場合はこのようにする。

$member = Member::findOrFail(1);
$member->m_flg = 1;
foreach($member->articles as $article){
	$article->a_flg = 1;
}
$member->push();

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です