指定可以在Eloquent模型上访问和查询的列

时间:2017-05-25 20:03:29

标签: php mysql laravel eloquent

我有以下问题,我正在从其他人访问数据库,并且他没有授予我对表的所有列的权限。所以现在当我像这样查询数据库时:

Client::get(1)

它会给我以下错误,这是预期的,因为它试图在不允许的情况下选择*。

SELECT command denied to user blabla

我知道您可以指定在查询本身上选择哪些列,但是无论如何要在模型本身上执行此操作?所以甚至不可能得到那个错误?

的内容
$columns = ['col1', 'col2']

然后编辑这些查询以选择那些列而不是*? 我在互联网上搜索过,但我们找不到我需要的东西。如果不可能,你们有没有解决这个问题的方法?

1 个答案:

答案 0 :(得分:0)

您是否尝试过Eloquent的$ hidden属性?通过在模型中添加以下内容,指定您不想要包含的列:

protected $hidden = ['col1', 'col2', 'etc'];

这通常用于隐藏密码&令牌列,我还没有测试过看到它实际上完全停止调用列,它可能仍然调用它但只是放弃数据,但是值得尝试。

此处有更多信息:https://laravel.com/docs/5.4/eloquent-serialization#hiding-attributes-from-json

或者,只需通过将此添加到您的模型中尝试这个小黑客:

    public function newSmallQuery()
{
    return Client::first(['Col1', 'Col2']);
}

然后只调用此查询而不是get(),它将返回这些列。