اگر به جای getRouteKeyName از این مورد هم استفاده کنیم نتیجه همونه پس تفاوتش در چیه؟
protected $primaryKey = 'slug';
public $keyType = 'string';
سلام،
تو لاراول، دوتا راه برای تعیین کلید اصلی داریم: یکی استفاده از تابع getRouteKeyName() و یکی هم protected $primaryKey. حالا فرقشون چیه؟
1. getRouteKeyName()
این تابع برای مسیریابی (route model binding) استفاده میشه. یعنی وقتی میخوای توی URL به جای id از یه فیلد دیگه مثل slug استفاده کنی، میای و این تابع رو تعریف میکنی. مثلاً برای مسیر /posts/slug به لاراول میگی از slug به جای id استفاده کن.
2. protected $primaryKey
اینو وقتی استفاده میکنی که میخوای کلید اصلی دیتابیس رو تغییر بدی. به طور پیشفرض، لاراول از id به عنوان کلید اصلی استفاده میکنه. اما اگه کلید اصلیت مثلاً slug باشه، با این ویژگی بهش میگی که توی عملیات CRUD (مثل find()، update()، و ...) از slug به عنوان کلید اصلی استفاده کنه.
بنابراین:
اگه فقط میخوای توی URL از slug استفاده کنی، از getRouteKeyName() استفاده کن.
اگه کلید اصلی دیتابیس رو هم میخوای تغییر بدی، protected $primaryKey رو تنظیم کن.