【问题标题】:Laravel resources - how does it work exactly?Laravel 资源 - 它是如何工作的?
【发布时间】:2020-11-29 02:02:55
【问题描述】:

当我创建一个api并使用laravel资源时,是获取完整数据然后在资源文件中选择发送哪些列更好,还是从数据库中选择数据时,确定应该选择哪些列?

1)

return UserResource::collection(User::all());

// Resource file:
public function toArray($request)
    {
        return [
            'id' => $this->id,
            'name' => $this->name
        ];
    }
return UserResource::collection(User::all('id', 'name'));

// Resource file:
    public function toArray($request)
        {
            return parent::toArray($request);
        }

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    最好只加载相关数据,因为这样可以节省内存和时间。 在 laravel 中,您可以使用“选择”功能在查询中轻松完成 例如

    return UserResource::collection(User::select('id', 'name')->get());
    
    // Resource file:
        public function toArray($request)
            {
                return parent::toArray($request);
            }
    

    https://laravel.com/docs/7.x/queries#selects

    How to select specific columns in laravel eloquent

    【讨论】:

    • 从我注意到的 - 这个例子也有效。这是正确的吗?用户::all('id', 'name')
    • 是的。 “all”函数接受参数,但使用 laravel 集合。查询生成器总是更快 (laracasts.com/discuss/channels/eloquent/…)。我想你正在寻找这个 - User::select('id', 'name')->get()->toArray();
    【解决方案2】:

    如果您在数据库中有数百万条记录,我肯定会建议从表中获取特定列。以下是我使用36K 记录在表格上运行的一些统计数据

    SELECT *  from `app_logs` // + 0.172 sec
    SELECT ID FROM `app_logs`// + 0.016 sec
    

    所以即使只有几千条记录,差异也足够了。

    但是,为了简单而不考虑性能,你也可以使用 laravel 的花哨语法

    User::all()
    

    Check @Marc_S answer on why you should select only required columns

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 2015-09-10
      相关资源
      最近更新 更多