n How to use Default Models in relationships in Laravel | CodimTh

Please Disable Your Browser Adblock Extension for our site and Refresh This Page!

our ads are user friendly, we do not serve popup ads. We serve responsible ads!

Refresh Page
Skip to main content
On . By CodimTh
Category:

The belongsTohasOnehasOneThrough, and morphOne relationships allow you to define a default model that will be returned if the given relationship is null

Let’s say we have a relationship in Post model:

public function author()
{
    return $this->belongsTo('App\Author');
}

And then somewhere in Blade file we have this:

{{ $post->author->name }}

Now, what if some post doesn’t have author? Meaning posts.author_id is NULL. You will get an error “Trying to get property of non-object”, meaning that there’s no $post->author, which is correct.

How I handle it usually:

{{ $post->author->name or 'Anonymous' }}

Or you can perform a check for existence:

@if ($post->author)
  {{ $post->author->name }}
@else
  Anonymous
@endif

 

What if I told you there’s a better way?

Apparently, Eloquent relationships allow to define “default” models, in case the model wouldn’t return anything.

public function author()
{
    return $this->belongsTo('App\Author')->withDefault();
}

In this example, the author() relation will return an empty App\Author model if no author is attached to the post.

Furthermore, we can assign default property values to that default model.


 
/**
 * Get the author of the post.
 */
public function user()
{
    return $this->belongsTo('App\Models\User')->withDefault([
        'name' => 'Anonymous',
    ]);
}

/**
 * Get the author of the post.
 */
public function user()
{
    return $this->belongsTo('App\Models\User')->withDefault(function ($user, $post) {
        $user->name = 'Anonymous';
    });
}

By using this structure, you don’t need to check anything in Blade anymore – just have the same

{{ $post->author->name }}

 

Source: https://laravel.com/docs/8.x/eloquent-relationships#default-models

Riadh Rahmi

Senior Web Developer PHP/Drupal & Laravel

I am a senior web developer, I have experience in planning and developing large scale dynamic web solutions especially in Drupal & Laravel.

Web Posts

Search

Page Facebook