You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中模型timestamps关联在Resource类返回true的问题

解决Laravel模型关联与内置timestamps属性的命名冲突问题

问题核心是Laravel Eloquent模型内置了公共属性$timestamps(默认值为true,用于控制是否自动维护创建/更新时间戳),当你直接访问$this->timestamps时,PHP会优先读取这个内置属性,而非你定义的关联对应的动态属性。

无需重构关联方法的解决办法有两种:

  • 方法一:直接调用getRelationValue获取关联
    这个方法可以绕过属性访问机制,直接从模型的关联缓存中获取预加载的关联集合,不会触发额外查询:

    public function toArray($request)
    {
        return [
            // 其他字段
            'timestamps' => TimestampResource::collection($this->getRelationValue('timestamps')),
        ];
    }
    
  • 方法二:调用关联方法并执行查询
    直接调用你定义的timestamps()关联方法,它会返回一个查询构造器,再调用get()即可获取关联集合。由于你已经预加载了关联,get()会直接使用预加载的数据,不会发起新的数据库请求:

    public function toArray($request)
    {
        return [
            // 其他字段
            'timestamps' => TimestampResource::collection($this->timestamps()->get()),
        ];
    }
    

这两种方式都能在不修改关联方法名称的前提下,正确获取到Timestamp模型的关联集合。

内容的提问来源于stack exchange,提问作者Soneye Sina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 23:20:54