category分类 一对多个商品product,商品一对一商品名称productname
$arr= Category::select('id','name')->with(['products'=>function($query){
$query->select('id','category_id');}])
->with(['products.productname'=>function($query){
$query->select('product_id','name');}])
->orderby('id','desc')
->whereIn('id',[1,2,3])
->get();
return $arr;
[{
"id": 3,
"name": "c",
"products": []
}, {
"id": 2,
"name": "b",
"products": []
}, {
"id": 1,
"name": "a",
"products": [{
"id": 1,
"category_id": 1,
"created_at": null,
"updated_at": null,
"productname": {
"product_id": 1,
"name": "hello"
}
}, {
"id": 2,
"category_id": 1,
"created_at": null,
"updated_at": null,
"productname": null
}]
}]
问题
1、第一个闭包 $query->select('id','category_id');}])隐藏字段好像没作用了??
2、我想吧"productname": {
"product_id": 1,
"name": "hello"
} 直接放到product下面该如何做呢
变成这样
"products": [{
"id": 1,
"category_id": 1,
"created_at": null,
"updated_at": null,
"product_id": 1,
"name": "hello"
}
第一个问题:第二个with会生成两个relation,[products,products.productname], 调用两次with后,第一个with的products被第二个替换掉了
这样可以避免,只调用一次with: