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