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

Client::get(1)


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

SELECT command denied to user blabla


我知道您可以指定要在查询本身上选择的列,但是仍然可以在模型本身上进行选择吗?因此,甚至不可能得到该错误?遵循以下原则

$columns = ['col1', 'col2']


然后将编辑这些查询以选择那些列而不是*?
我已经在整个互联网上进行搜索,但是找不到我需要的东西。并且,如果不可能,你们是否对此问题有任何解决方法?

最佳答案

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

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


这通常用于隐藏password&token列,我没有测试过它是否实际上完全停止了对列的调用,有可能它仍然会调用它,但只是排除了数据,尽管如此,还是值得尝试。

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

另外,只需将以下小技巧添加到您的模型中,即可尝试:

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


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

08-25 11:06
查看更多