اگر با 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