WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
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"がかえる
--}}