laravel 资源获取数据时改变id

laravel resource change the id when get data

我正在使用 laravel 中的资源,当我获取数据时它要求我提供 ID 但我的 table 中的主键是 user_menu_id 如何更改使用资源路线

路线

Route::resource('/UserMenuController', 'UserMenuController');

错误

Unknown column 'user_menus.id' in 'where clause' (SQL: select * from user_menus where user_menus.id = 1 limit 1)

型号

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class user_menu extends Model
{

 protected $fillable = ['menu_parent_id', 'menu_title', 'menu_class', 
'menu_id', 'menu_link', 'created_by', 'updated_by', 'created_at', 'updated_at'];
}

错误提示不存在名为 user_menus 的 table。在模型中设置真实的table名字$table属性:

protected $table = 'user_menu';

或者您可以 follow Laravel naming conventions 如我的回购协议中所述,只需将 table 重命名为 user_menususer_menu class 的复数形式)。

你说主键也不标准,也改成$primaryKey:

protected $primaryKey = 'user_menu_id';

在你的模型中定义主键class,你就会成功。

您遇到错误的原因是 Laravel 始终假设主键是 id。阅读错误日志,您会注意到:

1054 Unknown column 'user_menus.id' - 您可以立即知道它正在尝试查找不存在的列。

解决方法是将 $primaryKey 分配给您的模型 class,例如:

protected $primaryKey = 'user_menu_id';

根据 this article,您需要覆盖 $primaryKey 属性:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class user_menu extends Model
{
    protected $fillable = [
        'menu_parent_id', 'menu_title', 'menu_class', 
        'menu_id', 'menu_link', 'created_by', 'updated_by', 'created_at', 'updated_at'
    ];

    protected $primaryKey = 'user_menu_id';
}

Eloquent 将假定每个 table 都有一个名为 id 的主键列。您可以定义一个受保护的 $primaryKey 属性 来覆盖此约定。

class user_menu extends Model
{

    protected $primaryKey = 'user_menu_id';
}