【问题标题】:Laravel eloquent add custom query elementsLaravel eloquent 添加自定义查询元素
【发布时间】:2015-01-15 01:08:59
【问题描述】:

所以我在大小和服务器请求方面遇到了一些问题。所以我试图从 eloquent 中得到一个缩小版的行。因此,例如,这是我的查询调用

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

这可行,但会返回大量信息。我不需要的东西,关系,可观察的,日期,受保护的状态,可填充的和每一列。这是意料之中的,所以如果我想获得名字和姓氏以及电子邮件。我可以做这样的事情

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

这会起作用,但我不想每次都输入它。我是否可以在 eloquent 或我的模型中设置某个地方以便我可以这样做

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

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

【问题讨论】:

    标签: php mysql laravel orm eloquent


    【解决方案1】:

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

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

    【讨论】:

    • 这不是OP 要求的。
    【解决方案2】:

    是的,如果你在 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

    【讨论】:

    • 完美!这正是我想要的。
    • 欢迎@CalvinMoss :-)
    • 只是我不会称它为min,因为在构建器min() 上已经有一个方法。它仍然会返回完整的对象,只是少了几个字段。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2020-10-18
      • 2018-11-11
      • 2015-01-24
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多