当前位置: 首页 > 知识库问答 >
问题:

Laravel资源-它到底是如何工作的?

宰父俊彦
2023-03-14

当我创建一个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);
        }

共有2个答案

顾昊穹
2023-03-14

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

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

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

然而,为了简单和不考虑性能,您也可以使用laravel花式语法

User::all()

检查@Marc_关于为什么只选择所需列的答案

邢良才
2023-03-14

最好只加载相关数据,因为这样可以节省内存和时间。在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

如何在laravel eloquent中选择特定列

 类似资料:
  • 我们知道主存域很少:年轻的、终生的(旧的gen)和PermGen。 年轻领域分为伊甸园和幸存者(有两个)。 OldGen用于生存的对象。 MaxTenuringThreshold防止对象过早地被最终复制到OldGen空间。这很清楚,也很容易理解。 但是它是如何工作的呢?垃圾回收器如何处理这些在MaxTenuringThreshold之前仍然存在的对象,以何种方式?它们位于何处? 对象被复制回幸存者

  • 我正在学习Spring核心认证,我对Spring如何处理bean生命周期有一些疑问,特别是bean后处理器。 所以我有了这个模式: 我很清楚这意味着什么: 然后在bean创建阶段执行以下步骤: > 每个bean都在缺省情况下被急切地实例化(按照正确的顺序创建,并注入其依赖项)。 在依赖注入之后,每个bean都会经历一个后处理阶段,在这个阶段中可能会进行进一步的配置和初始化。 > 初始化器:如果指示

  • 其中有作为路径变量的{accountId}。例如,这个方法处理类似于“/accounts/123/conturnions”的URL,其中123值存储到一个名为accountId的变量中,然后我可以在代码中使用该变量,事实上,通过@PathVariable注释,我检索了这个值,并将其用作addDecurary()方法的输入参数。 @ResponseStatus(HttpStatus.Created)

  • 这是一个简单的错误:我在对象的格式字符串中使用了而不是。但我完全困惑于我的测试结果与错误的格式字符串。 以下代码: @Jan建议依赖toString()方法可能会有问题,所以我定义了一个日期格式,以与上面相同的代码打印。下面是附加输出:

  • 我几乎理解了尾递归是如何工作的,以及它与普通递归之间的区别。我只是不明白为什么它不要求堆栈记住它的返回地址。 在尾递归函数中调用函数本身后没有什么可做的,但对我来说这没有意义。

  • 根据Javadoc关于字符串。实习生(): 调用intern方法时,如果池中已经包含一个由equals(Object)方法确定的等于此String对象的字符串,则返回池中的字符串。否则,将此String对象添加到池中并返回对此String对象的引用。 我对此没有什么问题。 当创建一个新的字符串对象(不是使用字符串文字,而是使用new()操作符)时,如: