php - 如何在 Laravel 中显示分组值
问题描述
我正在尝试显示按类别分组的餐厅菜单,例如...
- 午餐
- 鸡肉和薯条
- 米
- 早餐
- 茶
- 咖啡
所以我的数据库中有 3 个表,餐厅、类别和菜单
类别模型
class Category extends Model
{
protected $fillable = [
'name'
];
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function menus_type()
{
return $this->hasMany('App\Menu','category_id');
}
}
菜单模型
class Menu extends Model
{
protected $fillable = [
'name',
'price',
'description',
'photoPath',
'restaurant_id',
'category_id',
];
/**
* Menu belongs to Restaurant
*/
public function restaurant()
{
return $this->belongsTo('App\Restaurant');
}
/**
* Menu belongs to category type
*/
public function category_type()
{
return $this->belongsTo('App\Category', 'category_id');
}
}
餐厅控制器
public function show($slug, RestaurantRepository $repository){
if(! $restaurant = $repository->get(['slug' => $slug], with(['cuisines','user', 'photos', 'thumbs', 'region', 'ratings.user']))) return abort('404');
$menus=Menu::with(['category_type'])->where('restaurant_id',$restaurant->id)->get()->groupBy('category_id');
return view('frontend.restaurant.show', compact('restaurant', 'p','menus'));
}
当我转储它时,它看起来很好。
结果已分组
现在我的问题出在视图上,当我尝试获取结果时,我得到了一个错误。
@if($menus)
<ul>
@foreach($menus as $m)
<li>
{{$m->name}}
</li>
@endforeach
</ul>
@endif
错误异常 (E_ERROR)。
此集合实例上不存在属性 [名称]。
解决方案
也迭代内循环。'groupBy()' 用category_id
as 键创建另一个数组。
@if($menus)
<ul>
@foreach($menus as $category_id=>$outer)
@foreach($outer as $k=>$inner)
<li>
{{$category_id}}: {{$inner->name}}
</li>
@endforeach
@endforeach
</ul>
@endif
更新了您的查询以从类别中获取
$categories = Category::with('menus_type')->get();
return view('frontend.restaurant.show', compact('restaurant', 'p','categories '));
在你看来
@if($categories ?? false)
<ul>
@foreach($categories ?? [] as $cat_key=>$category)
<li>
{{$category->name}}
</li>
<li>
<ul>
@foreach($category->menus_type as $menu_key=>$menu)
<li>
{{$menu->name}}
</li>
@endforeach
</ul>
</li>
@endforeach
</ul>
@endif
推荐阅读
- python - 反转线条和单词
- html - 文本和复选框对齐
- javascript - Asp.net core .click() 事件在部分视图中不起作用
- angular - angular 和 asp.net core 3.1 cors 策略
- php - PHP AWS S3 - 无法在 s3 中上传文件
- python - 计算按天分组的时间戳差异
- opengl-es - 如何将 EGLSurface 传递给 Kotlin(更好)或 Java 中的 Surface?
- python - 如何为 GET 和 POST 合并 django url
- javascript - 在某些页面中,在 chrome devtool 控制台中键入 5 + 15,输出未定义
- python - 基于与来自另一个数据帧的列的 & 操作的子集 pandas 数据帧