簡體   English   中英

如何在Laravel中使用join和groupby並進行迭代?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM