[英]How to use joins and groupby in laravel and to iterate through?
我有一個商店桌子和一個部分桌子。 商店可能位於許多部分。 問題是,如果商店屬於多個部分,則無法查看所有部分。 數據庫如下:
店鋪表
id | shopname
1 | KazaBlanka
2 | Adiddas
3 | Kentaky
截面表
id | Sectionname
1 | Clothes
2 | Shoes
3 | Foods
ShopSection(鏈接)表
id | sectionId | ShopId
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1
4 | 2 | 2
5 | 3 | 3
在我的控制器中,我嘗試使用類似的查詢來檢索數據:
$data = Shops::join('shopsection','shopsection.shopid','=','shop.id')
->join('sections','sections.id','=','shopsection.sectionid')
->select('shop.id as id', 'sectionname as sectionname',
'shopname as shopname')
->groupBy('shop.id')
->paginate(15);
在我看來,我將數據顯示如下
@foreach($data as $row)
<tr>
<td>{{ $row->shopname }}</td>
<td>{{ $row->shopsection }}</td>
</tr>
@endforeach
如果商店屬於多個部分,則僅顯示第一部分。 如何循環將結果數據再次循環到(每個商店)以顯示其中的部分? 我需要使用groupBy嗎?
提前致謝。
首先,為什么不使用模型關系? 這是Laravel中的一項強大功能: 在這里閱讀如何正確定義這種類型的關系。
當定義您的關系時,您的查詢代碼將簡化為:
$data = Shops::with('sections')->paginate(15);
當指定關系名稱sections時 ,Laravel進行適當的聯接,並且在結果數據中,您將有一個關鍵節 ,其中包含節的Collection,因此您可以遍歷它們。
謝謝@Vit Kos。
現在,我更新了商店模型,使其具有以下功能:
public function sections()
{
return $this->belongsToMany('Sections');
}
然后在控制器中,我以這種簡單的方式檢索數據:
$data = Shops::->with('sections')
->orderBy('sortby')
->paginate(15);
在視圖中,我可以訪問如下部分:
@foreach($data as $row)
<td>{{ $row->shop_name }}</td>
<td>
@foreach ($row->sections as $section)
{{ $section->section_name}}
@endforeach
</td>
@endforeach
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.