اگر با Eloquent در Laravel زیاد سر و کار دارید، احتمالاً بارها با این سناریو روبهرو شدید که یک ریلیشن مقدار null برمیگردونه و مجبور شدید قبل از دسترسی به فیلدهای اون ریلیشن، کلی شرط بنویسید که خطای Trying to get property 'x' of non-object نگیرید.
اما اخیراً با قابلیتی آشنا شدم که خیلی از این شرایط رو برام سادهتر کرد: متد withDefault.
🔍 متد withDefault چیه؟
در ریلیشنهایی مثل belongsTo، hasOne، hasOneThrough و morphOne که ممکنه مقدار null برگردونن، میتونید از متد withDefault استفاده کنید تا به جای null، یک مدل پیشفرض برگرده.
مثال:
با این کار، وقتی یک پست هیچ نویسندهای نداشته باشه، به جای اینکه null برگرده، یک شیء User خالی برمیگرده. یعنی:
خطا نمیده، بلکه فقط مقدار null یا رشته خالی برمیگردونه.
حتی میتونید مقدار پیشفرض رو هم مشخص کنید:
⛔ روی چه ریلیشنهایی کار نمیکنه؟
مهمه بدونید که withDefault فقط روی ریلیشنهایی که یک مقدار (single result) برمیگردونن کار میکنه. بنابراین روی hasMany یا morphMany که کالکشن برمیگردونن، کاربردی نداره.
✅ نتیجهگیری
استفاده از withDefault باعث میشه:
-
کد شما خواناتر بشه
-
از خطاهای رایج
nullجلوگیری بشه -
نیازی به چک کردن دستی
issetیا?->نباشه
حتماً یه نگاهی به داکیومنت Laravel بندازید: Laravel Docs - Default Models

