Laravel 5.6 预加载指定字段无数据返回问题求助
解决Laravel 5.6预加载关联无数据的问题
嘿,这个坑我之前踩过!你遇到的问题核心是预加载关联模型时没有包含关联所需的外键字段。
当你使用with('formats:id,upc')指定关联模型字段时,Laravel需要用外键(默认是product_id,也就是Product模型的主键对应到ProductFormat里的关联字段)来把主模型和关联模型的数据匹配起来。如果这个外键不在你指定的字段列表里,Laravel拿到ProductFormat的数据后,没法和对应的Product关联上,自然就不会返回formats数据了。
正确的写法应该是这样:
// 必须把关联外键(默认是product_id)加到字段列表里 Product::with('formats:id,upc,product_id')->get();
额外说明:
如果你的ProductFormat模型里的外键不是默认的product_id,而是自定义的字段(比如prod_id),那你需要先在关联方法里明确指定外键:
// Product模型的关联方法 public function formats() { return $this->hasMany(ProductFormat::class, 'prod_id'); }
同时预加载时也要包含这个自定义外键:
Product::with('formats:id,upc,prod_id')->get();
简单来说,预加载指定字段时,一定要包含关联模型用来关联主模型的外键字段,不然Laravel没法完成数据关联匹配~
内容的提问来源于stack exchange,提问作者Chin Leung
相关产品推荐
相关产品推荐

