如何使用 Laravel 实现类别子菜单中区域的计数?
How do I achieve a count for regions in a sub menu of categories using Laravel?
我正在尝试获取某个类别下各地区的列表数。
主页上的区域菜单显示了其区域中每个类别的所有列表的数量。
在类别页面上,我试图显示在选定类别中有列表的地区的计数。
在我的列表模型中
public function scopeInCategory($query, Category $category)
{
return $query->whereIn('category_id', [$category->id]);
}
public function region()
{
return $this->belongsTo(Region::class);
}
在我的区域模型中
public function listings()
{
return $this->hasMany(Listing::class);
}
在我的类别控制器中
class CategoryController extends Controller
{
public function index(Category $category)
{
$regions = Region::with(['listings' => function($query) use ($category) {
$query->inCategory($category);
}])->first('region')->get();
return view('categories.index', compact('regions'));
}
}
在我的 region_dropdown.blade.php
@foreach($regions as $region)
<a class="dropdown-item" href="#">{{ $region->name }}
( {{ $region->listings->count() }} )</a>
@endforeach
但这不起作用区域菜单仍然显示类别页面上每个类别中所有列表的计数。
可以使用Eloquent的withCount
方法通过特定的Category
获取每个Region
下的Listing
s的计数,然后访问通过访问 Eloquent 将为您初始化的 listings_count
属性,每个 Region
上的 count
ed 值。
class CategoryController extends Controller
{
public function index(Category $category)
{
$regions = Region::withCount([
'listings' => fn($q) => $q->where('category_id', $category->id)
])->get();
return view('categories.index', compact('regions'));
}
}
并且在您的 blade
文件中:
@foreach($regions as $region)
<a class="dropdown-item" href="#">
{{ sprintf('%s (%d)', $region->name, $region->listings_count) }}
</a>
@endforeach
如有任何疑问,请随时提出。
我正在尝试获取某个类别下各地区的列表数。
主页上的区域菜单显示了其区域中每个类别的所有列表的数量。 在类别页面上,我试图显示在选定类别中有列表的地区的计数。
在我的列表模型中
public function scopeInCategory($query, Category $category)
{
return $query->whereIn('category_id', [$category->id]);
}
public function region()
{
return $this->belongsTo(Region::class);
}
在我的区域模型中
public function listings()
{
return $this->hasMany(Listing::class);
}
在我的类别控制器中
class CategoryController extends Controller
{
public function index(Category $category)
{
$regions = Region::with(['listings' => function($query) use ($category) {
$query->inCategory($category);
}])->first('region')->get();
return view('categories.index', compact('regions'));
}
}
在我的 region_dropdown.blade.php
@foreach($regions as $region)
<a class="dropdown-item" href="#">{{ $region->name }}
( {{ $region->listings->count() }} )</a>
@endforeach
但这不起作用区域菜单仍然显示类别页面上每个类别中所有列表的计数。
可以使用Eloquent的withCount
方法通过特定的Category
获取每个Region
下的Listing
s的计数,然后访问通过访问 Eloquent 将为您初始化的 listings_count
属性,每个 Region
上的 count
ed 值。
class CategoryController extends Controller
{
public function index(Category $category)
{
$regions = Region::withCount([
'listings' => fn($q) => $q->where('category_id', $category->id)
])->get();
return view('categories.index', compact('regions'));
}
}
并且在您的 blade
文件中:
@foreach($regions as $region)
<a class="dropdown-item" href="#">
{{ sprintf('%s (%d)', $region->name, $region->listings_count) }}
</a>
@endforeach
如有任何疑问,请随时提出。