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
相关产品推荐
相关产品推荐

