Laravel雄辩地添加自定义查询元素

时间:2014-11-18 00:00:29

标签: php mysql laravel orm eloquent

所以我在大小和服务器请求方面遇到了一些麻烦。所以我试图从雄辩中获得一行的缩小版本。例如,这里是我的查询电话

$user = User::where('email', '=', 'example@test.com')->first();

这有效但返回了大量信息。我不需要的东西,关系,可观察性,日期,保护状态,可填写和每一列。这是预期的如果我想获得姓名和电子邮件。我可以做这样的事情

$users = DB::table('users')->select('firstname','lastname', 'email')->get();

这会有效,除了我不想每次都打算这样做。我是否有可能在雄辩或我的模型中设置某个地方,以便我能够做到

$user = User::where('email', '=', 'example@test.com')->min()->first();

只需添加一个名为min()的自定义函数,它只能抓取这三个值。这样的事情可能吗?

3 个答案:

答案 0 :(得分:3)

是的,如果您在User模型中声明一个方法,就可以这样做:

// User.php
public function scopeMin($query)
{
    return $query->select('firstname','lastname', 'email');
}

然后您可以像这样使用它(仅获取'firstname','lastname', 'email'):

$user = User::where('email', '=', 'example@test.com')->min()->first();

阅读文档中的Query Scope

答案 1 :(得分:2)

您可以通过在first()方法中传递数组来限制列。

$user = User::where('email', '=', 'example@test.com')->first(['firstname','lastname', 'email']);

答案 2 :(得分:0)

您可以在模型中插入$ hidden数组,其中包含您不希望出现的列。