微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Laravel中嵌套关系?

如何解决如何在Laravel中嵌套关系?

在Linesheet模型中,我有以下两种关系。

public function items()
    {
        return $this->hasMany('\App\Models\LinesheetItem','linesheet_id','id')
                    ->join('items',function ($join) {
                        $join->on('items.amt_item','=','linesheet_items.item_code');
                        $join->on('items.company','linesheet_items.company');
                        $join->on('items.division','linesheet_items.division');
                    })
                    ->select('linesheet_items.linesheet_id','items.id','items.amt_item','items.image_name','items.company','items.division','items.color_description','items.item_description','items.season','items.wholesale_price','items.retail_price','items.color_code','items.vendor_desc','items.vendor_code','items.brand','items.category_code','items.category','items.fabric_code','items.fabric_desc')
                    ->groupBy('linesheet_items.item_code','linesheet_items.company','linesheet_items.division');
    }

public function size_grid()
    {
        return $this->hasMany('\App\Models\LinesheetItem','id')
                    ->join('inventory_items',function ($join) {
                        $join->on('inventory_items.item','linesheet_items.item_code');
                        $join->on('inventory_items.company','linesheet_items.company');
                        $join->on('inventory_items.division','linesheet_items.division');
                    })
                    ->join('items','inventory_items.item');
                        $join->on('items.company','inventory_items.company');
                        $join->on('items.division','inventory_items.division');
                    })
                    ->select('linesheet_items.linesheet_id','inventory_items.id','inventory_items.item','inventory_items.color','inventory_items.size_no','inventory_items.size_desc','inventory_items.on_hand')
                    ->groupBy('inventory_items.color','inventory_items.on_hand');
    }

当前,我分别显示这两个关系。

$linesheet = Linesheet::where('linesheet.id',$id)
                                ->select('linesheet.*')->with(['items','size_grid','creator:id,username','updater:id,username'])
                                ->first();

但是我需要在项目内部将size_grid显示为嵌套并得到如下结果:

"data": {
    "id": 4,"name": "linesheet 10\/4","code": "code1","note": "note1","order_cut_off_date": "2019-11-11","start_ship_date": "2019-11-11","complete_ship_date": "2019-11-11","is_future_delivery": 1,"min_shipping_window": 1,"season_id": 1,"year": 1,"season_code": "code1","made_to_order": 1,"visible_to_all": 1,"is_sub_linesheet": 1,"updated_at": "2020-10-04 05:36:32","created_at": "Oct 04,2020","updated_by": 1,"created_by": 1,"deleted_at": null,"items": [
      {
        "id": 5,"linesheet_id": 4,"item_code": "PS839137","company": "01","division": "PAP","deleted_at": null
      },{
        "id": 6,"item_code": "PS839572","deleted_at": null
      }
      "size_grid" : {
          //size_grid data
      }
    ]
}

所以我尝试了以下方法来实现这一目标:

$linesheet = Linesheet::where('linesheet.id',$id)
                                ->select('linesheet.*')->with(['items.size_grid',username'])
                                ->first();

但是,如果运行此命令,我会说以下错误

"Call to undefined relationship [size_grid] on model [App\\Models\\LinesheetItem]."

如何解决错误并获得预期结果?预先感谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。