Laravelでモデルにデフォルト値を設定する方法と条件で値を変える方法

Laravelでモデルにデフォルト値を設定する方法と条件で値を変える方法

678 回閲覧されました

みなさんこんにちは、jonioです。

Laravelでデフォルト値を設定する方法と条件でデフォルト値を変更する方法のメモとしてこの記事を残します。

なぜモデルに設定するか

マイグレーションファイルにも設定できます「->default(‘設定したい値’)」と記述すればいいです。

public function up()
 {
  Schema::table('users', function (Blueprint $table) {
    $table->boolean('hidden')->after('role_type_id')->default(0);
  });
}

このやり方をするとデフォルト値を変更しないといけなくなった時に「php artisan migrate:rollback」を叩かないといけなくて面倒だからマイグレーションファイルにデフォルト値を設定したくないです。

モデルにデフォルト値を設定

モデルに下記のコードを書くだけです。

protected $attributes = [
  'カラム名' => "設定する値"
];

サンプルコードは下記になります。

protected $attributes = [
  'hidden' => "0"
];

デフォルト値を条件で分ける

下記のようにif文を使うことはできません。

protected $attributes = [
  //ここにif文を書く
];

モデルの中にコンストラクタを使えば条件分岐ができます。

protected $attributes = [];

public function __construct(array $attributes = [])
{
  parent::__construct($attributes);

  $this->attributes['role_type_id'] = User::count() == 0 ? 1 : 2;
}

1行目でデフォルト値を設定していましたが空っぽで置きます。

そして7行目で「role_type_id」カラムを設定して「User::count() == 0 ? 1 : 2」で登録ユーザーがいないとrole_type_idカラムの値が1になり登録ユーザーがいるとrole_type_idカラムの値が2になるといった具合にデフォルト値を切り替えることができます。

日付のデフォルト値を登録する方法

モデルに記述しますがやり方が明らかに違う為別の記事にしています。