laravel with 问题

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"

}
阅读 3.9k
2 个回答

第一个问题:第二个with会生成两个relation,[products,products.productname], 调用两次with后,第一个with的products被第二个替换掉了

这样可以避免,只调用一次with:

with([
            'products' => function($query) {
                return $query->select(['id', 'category_id']);
            },
            'products.productname' => function($query) {
                return $query->select(['product_id', 'name']);
            },
        ])

请问第二个问题解决了吗,我也想这样,现在是遍历再处理一遍

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题