Blog スタッフブログ

Laravel システム開発

[Laravel]Modelのリレーション利用時のデフォルトモデルの設定の仕方

システム開発担当のTFです。

※Laravel10系統対応

やり方

  • リレーション設定時にwithDefault関数を利用する

メモ

withDefaultでデフォルトモデルを付けない場合、リレーション先が存在せずにnullになった場合、null判定せずに子要素にアクセスすると、エラーが発生する

サンプル

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Child extends Model
{
	public function parent()
    {
		// ①
        // withDefault()を用いない場合、リレーション先がなければnullがかえる
		// return $this->belongsTo('App\Models\Parent');
		
		// ②
		// リレーション先がなければ、空のモデルがかえる
		return $this->belongsTo('App\Models\Parent')->withDefault();
		
		// ③
		// クロシージャでデフォルトの値を返す事もできる
		/*
		return $this->belongsTo('App\Models\Parent')->withDefault([
			'name' => 'Test',
		]);
		*/
    }
}
{{ $child->parent->name }}
	{{--
		①は、parentが存在しない 場合、 nullのname にアクセスしエラーで落ちる
		②は、parentが存在しない 場合、 空のChildのnameにアクセスとなり""がかえる
		③は、parentが存在しない 場合、 デフォルト値が設定されたChildのnameにアクセスとなり"Test"がかえる
	--}}