如何在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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...