LoginSignup
2
1

More than 3 years have passed since last update.

【Laravel】ミューテタを一時的に無効にする。

Posted at

メモとして残します。

以前ミューテタについての記事を投稿しました。
非常に便利なミューテタですが時には、一時的に無効にして生の値をセットしてほしいということもあります。
いろいろ調べてはみましたが、どうやらEloquentORMで一時的にミューテタを無効にするメソッドは用意されていないようです。

そのため、疑似的にミューテタを無効にする方法を記述します。

■やり方

ミューテタについての例に付け加えます。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Hoge extends Model
{
    public $isIgnoreMutator = false;
    public function setカラム名Attribute($value)
    {
        //isIgnoreMutatorをTrueにすれば値をそのままセット
        if( $this->isIgnoreMutator ){
            $this->attributes['カラム名'] = $value;
        }else{
            $this->attributes['カラム名'] = $value ?? 'hogehoge';
        }
    }
}

コントローラ等で生成したこのモデルのオブジェクトの
メンバ変数$isIgnoreMutatorにtrueをセットすることで、以降の処理でfillだろうが、なんだろうが、値が、そのままセットされるようになります。

■おわりに

見ての通り、ミューテタそのものは無効になっておりません(;^ω^)
あくまで疑似的に無効化しているだけのため、少し不格好です。。。

2
1
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
2
1