メモとして残します。
以前ミューテタについての記事を投稿しました。
非常に便利なミューテタですが時には、一時的に無効にして生の値をセットしてほしいということもあります。
いろいろ調べてはみましたが、どうやら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だろうが、なんだろうが、値が、そのままセットされるようになります。
■おわりに
見ての通り、ミューテタそのものは無効になっておりません(;^ω^)
あくまで疑似的に無効化しているだけのため、少し不格好です。。。