Laravel中查询主模型与关联模型指定字段时关联数据返回null如何解决?
解决Laravel关联查询Product返回null的问题
问题出在你查询Order时,没有包含关联Product所需的外键字段。
原因分析
belongsTo关联依赖Order表中的外键(默认是product_id)来匹配Product表的id。你当前的select只指定了Order的几个字段,没包含这个外键,Laravel无法确定要关联哪个Product,所以关联数据返回null。
解决方案
在Order的select数组中添加外键字段(比如product_id):
修改后的控制器代码
$orders = Order::with('product:id,name') ->select([ 'id', 'order_number', 'ordered_on', 'status', 'total', 'product_id' // 必须添加这个外键字段 ]) ->where('customer_id', session('customer_id')) ->orderBy('ordered_on', 'DESC') ->paginate(6); dd($orders);
额外说明
- 如果你的外键不是默认的
product_id(比如自定义了字段名),需要在关联方法中指定,同时在select中添加对应的外键:
此时select中要添加// Order模型中的关联方法(如果外键是custom_product_id) public function product() { return $this->belongsTo(Product::class, 'custom_product_id'); }custom_product_id。
内容的提问来源于stack exchange,提问作者Blues Clues
相关产品推荐
相关产品推荐

