【问题标题】:How to show hidden column in model? laravel eloquent [closed]如何在模型中显示隐藏列? laravel 雄辩[关闭]
【发布时间】:2020-01-25 13:37:58
【问题描述】:

我有一个模特Driver

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

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

我不明白当我使用tinker 时它会返回所有列。

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

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

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

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


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

我的路线是这样的:

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

【问题讨论】:

  • 所有列?你可以删除你看守的 id 吗?
  • 您的回复中除了id 之外的所有其他字段或空回复或什么?
  • 如何调用show方法?
  • @Qonvex620 编辑了我的帖子,先生。对不起,我误解了这个问题
  • 那么您在 show 方法中传递了 Id 对吗?

标签: laravel eloquent laravel-6


【解决方案1】:

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

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

return $driver;

进入

return \App\Driver::first();

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

如果你有这样的路线:

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

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

$driver = new Driver();

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

【讨论】:

  • @charles 为show 方法显示您的路线
【解决方案2】:

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

自定义键名

如果您希望模型绑定在检索给定模型类时使用 id 以外的数据库列,您可以覆盖 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
}

【讨论】:

  • 我在route 参数上打错了先生。现在它的工作。感谢您抽出宝贵时间。
猜你喜欢
  • 2021-08-11
  • 2019-02-12
  • 2013-06-04
  • 2016-11-26
  • 1970-01-01
  • 2017-02-16
  • 2018-02-19
  • 1970-01-01
相关资源
最近更新 更多