我有一张商店桌子和一张桌子。该商店可能位于许多部分。 问题是,如果商店属于超过1个部分,我无法查看所有部分。 数据库如下:
购物台
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 ??
提前致谢。
答案 0 :(得分:1)
首先,为什么不使用模型关系?这是Laravel中一个强大的功能:阅读here如何正确定义这种类型的关系。
当您的关系被定义时,您的查询代码将简化为:
$data = Shops::with('sections')->paginate(15);
当您指定关系名称部分时,Laravel会进行正确的连接,并且在结果数据中,您将拥有一个包含部分集合的部分键,所以你可以循环使用它们。
答案 1 :(得分:0)
感谢@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