The belongsTo, hasOne, hasOneThrough, and morphOne relationships allow you to define a default model that will be returned if the given relationship is null. This pattern is often referred to as the Null Object pattern and can help remove conditional checks in your code
Before
User model with has one country relationship:
public function country()
{
return $this->hasOne(\App\Models\Country::class, 'id', 'country_id');
}
View:
{{ $user->country ? $user->country->name : '-' }}
After
User model with has one country relationship and default model:
public function country()
{
return $this->hasOne(\App\Models\Country::class, 'id', 'country_id')->withDefault([
'name' => '-'
]);
}
View:
{{ $user->country->name }}