如何在模型中显示隐藏列? laravel eloquent

How to show hidden column in model? laravel eloquent

我有一个模型Driver

class Driver extends Model
{
    protected $guarded = ['id', 'token', 'user_id'];

    public function getRouteKeyName()
    {
        return 'token';
    }
}

当我使用 tinker 它 returns 所有列时,我不明白。

$d = \App\Driver::first();

但是当我尝试从我的控制器中获取方法时,它没有返回所有列,包括对关系非常重要的 id。我什至试过了return $driver->makeVisible(['id'])还是不成功。

public function show(Driver $driver)
{
    return $driver;
}

有人知道哪里出了问题吗?需要你的帮助先生们。


已编辑:请原谅我的误解。 它没有返回所有的列,它全部appends返回了我misunderstood/thought它是一个列。但是我很困惑为什么在我的数据库中找不到它时为什么它没有 404

我的路线是这样的:

Route::get('/drivers/{vehicle}', 'DriverController@show');

如果 Driver 模型看起来像这样,它应该 return 所有字段。但我相信您没有向我们展示完整的模型,这就是为什么您应该验证您是否没有在此模型中定义 toArray 方法,该方法可能只选择某些列进行 returned。

也有可能您以无效的方式使用了路由模型绑定,因此 $driver 这里的对象不存在,因此根本没有设置 ID - 为确认这一点,您应该更改:

return $driver;

进入

return \App\Driver::first();

看看它是否改变了 returned 结果,现在你得到了模型 ID。

如果你有这样的路线:

Route::get('/drivers/{vehicle}', 'DriverController@show');

因此参数名称与控制器中的参数名称完全不同,那么 Laravel 将只注入控制器新对象实例,因此在您的控制器中 $driver 实际上与您使用的相同:

$driver = new Driver();

这就是为什么您应该更新路由中的参数名称或更新控制器中的参数名称的原因。

Laravel 将自动注入 ID 与请求 URI 中的相应值匹配的模型实例。如果在数据库中没有找到匹配的模型实例,将自动生成 404 HTTP 响应。

自定义键名

如果您希望模型绑定在检索给定模型时使用 id 以外的数据库列 class,您可以覆盖 Eloquent 模型上的 getRouteKeyName 方法:

/**
 * Get the route key for the model.
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'token'; // make sure you have also a token column in your table
}