مجید
3 سال پیش توسط مجید مطرح شد
3 پاسخ

متد withDefault چیست

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

 public function brand()
    {
        return $this->belongsTo(Brand::class)->withDefault();
    }

ثبت پرسش جدید
نیما - ش
تخصص : برنامه نویس وب
@nimageneral 3 سال پیش مطرح شد
0

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


moha li
تخصص : توسعه دهنده لاراول و Vue
@mohaligateway 3 سال پیش مطرح شد
0

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


abbasrahmati
@abbasrahmati1365 2 سال پیش مطرح شد
0

فرض کنید یه مدل دارید با نام پست و یه مدل با نام یوزر . از نظر منطقی یکی والده(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 اون چیزی که ما بعنوان والد پیشفرض در نظر گرفتیم برگشت داده میشه
امیدوارم مفید بوده باشه


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

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