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

Laravel: 如何为注入的模型对象加载额外关联资源

问题原因

你第一种写法出错的核心逻辑问题:通过隐式模型注入得到的$myData本身已经是Laravel自动根据路由参数查询返回的Table0模型实例,你在实例上调用with()方法相当于重新初始化了一个新的查询构造器,后续调用first()自然会返回整张表的第一条数据,完全没有用到已经注入完成的模型数据。

基于模型注入的实现方案

分两步完成配置即可:

1. 配置路由绑定的查询字段

因为你的业务逻辑是用key字段而非默认主键id做查询匹配,需要先指定路由绑定的字段,两种方案二选一即可:

  • 方案一:在Table0模型中重写getRouteKeyName方法,全局指定该模型的路由绑定字段
public function getRouteKeyName()
{
    return 'key';
}
  • 方案二:直接在路由定义中指定绑定字段,仅对当前路由生效
Route::get('/table0/{myData:key}', [Table0Controller::class, 'show']);

注意要保证路由参数名myData和控制器方法的参数名$myData完全一致,否则隐式注入不会生效。

2. 修改控制器方法,为注入的模型加载关联

已经拿到模型实例后,使用load()方法做延迟预加载关联即可,不需要再调用查询构造器方法:

public function show(Table0 $myData) {
    // 支持一次传入多个关联名,不需要多次调用load方法
    return $myData->load('additionalTable1', 'additionalTable2');
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:39:01