我有一个商店表和一个分区表。商店可能位于许多部分。问题是,如果商店属于多个部分,我无法查看所有部分。数据库如下所示:
餐桌
id | shopname
1 | KazaBlanka
2 | Adiddas
3 | Kentaky
部分表
id | Sectionname
1 | Clothes
2 | Shoes
3 | Foods
商店部分(链接)表
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);
当您指定关系名称部分时,Laravel会进行适当的连接,并且在结果数据中,您将拥有一个包含部分集合的关键部分,因此您可以遍历它们。
谢谢@Vit科斯。
现在我更新了我的商店模型,如下所示:
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