راکت

متد withDefault چیست

3 پاسخ

سلام
توی مدل product یک همچین رابطه ای را دیدم ولی متوجه نشدم
متد withDefault دقیقا چیکار میکنه؟

 public function brand()
    {
        return $this->belongsTo(Brand::class)->withDefault();
    }
مجید
مجید
@MajidDeveloper
ثبت پرسش جدید

پاسخ‌ها

3
نیما  ش
نیما ش
@nimageneral

تخصص: برنامه نویس وب

فکرکنم بخاطر این باشه که اگر مدل مورد نظر وجود نداشت ، یک کالکشن خالی برگشت داده بشه.

moha li
moha li
@mohaligateway

تخصص: توسعه دهنده لاراول و Vue

سلام
مستندات لاراول به خوبی این مورد رو توضیح داده.
@MajidDeveloper
@MajidDeveloper

شاید پاسخ شما همین‌جا باشد

abbasrahmati
abbasrahmati
@abbasrahmati1365

فرض کنید یه مدل دارید با نام پست و یه مدل با نام یوزر . از نظر منطقی یکی والده(parent) و یکی فرزند(child) . در رابطه پست و کاربر ، پست فرزنده کاربره.
برای این ارتباط ما درون مدل کاربر یه متد ایجاد مکنیم با نام posts چون کاربر میتونه چندین پست داشته باشه و درون این متد از یه متد دیگه با نام hasmany استفاده میکنیم و منطق برنامه رو می نویسیم

    public function posts()
    {
       return $this->hasMany(posts::class); 
}

اما این ارتباط ربطی با متد withDefault ما نداره !!!!
در یه نوع دیگه از ارتباط ما از طریق فرزند که اینجا پست هست به والد دسترسی پیدا می کنیم
به این نوع ارتباط one to many معکوس میگن
لاراول برای بعضی متدها (belongsTo, hasOne, hasOneThrough, morphOne)یه کار قشنگ کرده اونم اینکه اگر از طریق فرزند ، ما اشاره کردیم به یک والد که از قضا اون والد وجود نداشت یه پیشفرضی بعنوان والد نشون داده بشه و اون فرزند بی پدر و مادر نباشه !!
بزارید با مثال بگم :
من درون مدل پست میام و ارتباط معکوس میزنم :
یعنی از طریق پست میخوام به کاربر دسترسی پیدا کنم

  public function user()
    {
      return $this->belongsTo(User::class)->withDefault([
          'author_name' => 'Guest ',
      ]);

اگه دقت کنید من با متد withDefault یه والد پیشفرضی ایجاد کردم.
حالا فرض کنیم درون دیتابیسم و در جدول کاربران من دو تا ردیف دارم
آی دی 1 = عباس
آی دی 2 = سجاد
حالا کاربر میاد و در کنترلر و یا هر جای دیگه این کدو ران میکنه :

$user=Post::findOrFail(3)->user;
return $user;

اگه دقت کنید من در findOrFail(3) آی دی 3 رو پاس دادم در حالی که در جدول یوزر آی دی 3 وجود نداره و اینجاست که معجزه لاراول رخ میده و با متد withDefault اون چیزی که ما بعنوان والد پیشفرض در نظر گرفتیم برگشت داده میشه
امیدوارم مفید بوده باشه

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام