三張mysql資料表
產品表(product)
套餐表(package)
套餐資訊表(package_data)。
產品表主要欄位:
套餐表主要欄位:
id(自增id)
title(套餐名稱)
....
套餐資訊表主要欄位:
id(自增id)
product_id(產品id)
package-id(套餐id)
product_num(產品數量)
...
簡單說明:
一個套餐中有多個產品,套餐表和套餐資訊表本來可以弄在一個表中,但是為了減少冗餘資料,所以對套餐表進行了簡單的垂直分表。
問題來啦 :-)
ps:上述問題已經翻過官方文檔,但是我智商太低,導致理解的不清晰,所以特來請教各位。
期待各位大大熱情指導 ^_^
回複內容:
三張mysql資料表
產品表(product)
套餐表(package)
套餐資訊表(package_data)。
產品表主要欄位:
套餐表主要欄位:
id(自增id)
title(套餐名稱)
....
套餐資訊表主要欄位:
id(自增id)
product_id(產品id)
package-id(套餐id)
product_num(產品數量)
...
簡單說明:
一個套餐中有多個產品,套餐表和套餐資訊表本來可以弄在一個表中,但是為了減少冗餘資料,所以對套餐表進行了簡單的垂直分表。
問題來啦 :-)
ps:上述問題已經翻過官方文檔,但是我智商太低,導致理解的不清晰,所以特來請教各位。
期待各位大大熱情指導 ^_^
咳咳~,最終還是在文檔中找到答案。連結在此 。請自行搜尋"嵌套的渴求式載入"部分查看。
說下具體過程:
package模型中定義hasManyData()方法
public function hasManyData(){ return $this->hasMany(PackageData::class, 'package_id', 'id');}
package_data模型中定義BelongsToProduct()方法
public function BelongsToProduct(){ return $this->belongsTo(Product::class, 'product_id', 'id');}
控制器中使用:
$packageList = Package::with('hasManyData', 'package_data.BelongsToProduct')->get();
大功告成!
另一種方案
ps:某同事給出的方法是大概是這樣的,以下為虛擬碼:
$packageList = Package::with('hasManyData')->get();foreach( $packageList as $key => $val ){ ... $productList = PackageData::with('BelongsToProduct')->where(...)->get(); ...}
我覺得效能渣的一逼~,不想再研究啦!腦袋有點熱,所以寫的有點亂,不對的地方還請斧正。謝謝圍觀過這個問題的大大們~