مقدار پیش فرض در روابط BelongsTo

اخیرا راجع به یک ویژگی در relationship لاراول یافته ام که کلا نحوه کد زدنم را تغییر داده است. برای همین می‌خواهم اون رو به شما بگویم:

فرض می‌کنیم که یک رابطه در مدل Post داریم:


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

و در جایی از Blade کدی به صورت زیر داریم:


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

الان اگر مطلب ما نویسنده نداشته باشد، چه می‌شود؟ یعنی اگر posts.author_id خالی باشد. سایت خطای “Trying to get property of non-object” خواهد داد. یعنی برای این مطلب $post->author وجود ندارد که درست باشد.

و اما من معمولا چگونه این مشکل را حل می‌کردم:


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

و یا شما می‌توانید وجود آنرا چک کنید:


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

حالا شاید خوشحال شید که من راه بهتری برای اون بهتون بگم.

ظاهرا، Eloquent Relationships اجازه می‌دهد که مقدار پیش‌فرض تعریف گردد، در حالت هایی که مدل هیچ مقداری برنمی‌گرداند.


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

در این مثال، رابطه author() یک مدل خالی از App\Author را برمی‌گرداند، اگر هیچ author به post وصل نشده باشد.

همچنین، می‌توانیم یک مقدار پیش‌فرض را در default مدل قرار بدهیم.


public function author()
{
    return $this->belongsTo('App\Author')->withDefault([
        'name' => 'Guest Author',
    ]);
}

با استفاده از این ساختار، نیازی نیست که دیگر در Blade چیزی را چک کنید، به همین سادگی.


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

کد بالا تنها چیزی است که نیاز است.

برای مطالعه بیشتر به بخش Default Models در داکیومنت سایت لاراول مراجعه کنید.

کامنت ها (0)

ارسال نظر