如何在 laravel 中使用 joins 和 groupby 并进行迭代?
How to use joins and groupby in laravel and to iterate through?
我有一个商店 table 和一个部分 table。该商店可能位于许多部分下。
问题是,如果商店属于多个部分,我无法查看所有部分。
数据库如下:
购物table
id | shopname
1 | KazaBlanka
2 | Adiddas
3 | Kentaky
栏目Table
id | Sectionname
1 | Clothes
2 | Shoes
3 | Foods
ShopSection(link)table
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 中的一项强大功能:阅读 here 如何正确定义此类关系。
当你的关系被定义时,你的查询代码将被简化为:
$data = Shops::with('sections')->paginate(15);
当您指定关系名称 sections 时,Laravel 进行正确的连接,并且在结果数据中,您将有一个键 sections 将包含节的集合,因此您可以遍历它们。
感谢@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
我有一个商店 table 和一个部分 table。该商店可能位于许多部分下。 问题是,如果商店属于多个部分,我无法查看所有部分。 数据库如下:
购物table
id | shopname
1 | KazaBlanka
2 | Adiddas
3 | Kentaky
栏目Table
id | Sectionname
1 | Clothes
2 | Shoes
3 | Foods
ShopSection(link)table
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 中的一项强大功能:阅读 here 如何正确定义此类关系。
当你的关系被定义时,你的查询代码将被简化为:
$data = Shops::with('sections')->paginate(15);
当您指定关系名称 sections 时,Laravel 进行正确的连接,并且在结果数据中,您将有一个键 sections 将包含节的集合,因此您可以遍历它们。
感谢@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