エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【Laravel】モデルインスタンスのフィールド値を変えたときの対応【434日目】

モデルインスタンスのフィールド値を変えた

public function __construct(User $user)
{
    $this->user = $user;
}

public function updateUser()
{
    $this->user->timestamps = false; // update_atを更新させない
    $this->user->where('id', '=', $user_id)
            ->update([
                'is_active' => 1,
            ]);
}

こんなふうに、Repositoryパターンとかで、共通のインスタンスを使うときに、
値を書き換えてしまった。

このままだと、同じインスタンスを使うために、別な関数でupdate文を書くと、
update_atが更新されなくなってしまう。

フィールド値をもとに戻そう

$timestamps = $this->user->timestamps;
$this->user->timestamps = false;
$this->user->where('id', '=', $user_id)
            ->update([
                'is_active' => 1,
            ]);
$this->user->timestamps = $timestamps;

こうやって、元の値を一旦保存して、
update文を書き終わったら、またもとに戻そう。これで大丈夫

求む他の方法

他にも良い書き方がありましたら、ぜひ教えてください!

一旦これで進めようと思いますー

ってことでお疲れ様でした。