您好我的数据库中有两个表:
我有一个显示所有类别列表的页面。但是,我想显示类别标题旁边每个类别中有多少事件的计数。 例如:
这两个模型之间的关系是一对多,因为一个类别可以有零或更多事件。
我的问题是,当我执行此代码时,如何获取每个类别的事件总数以及类别数据:
$categories = Category::get();
到目前为止我尝试了什么:
class Categories extends Model implements SluggableInterface
{
use SluggableTrait;
protected $sluggable = [
'build_from' => 'name',
'save_to' => 'slug',
'on_update' => true,
];
protected $table = 'categories';
public function events() {
return $this->hasMany('App\Models\Events', 'category_id');
}
public function eventsCountRelation() {
return $this->hasMany('App\Models\Events', 'category_id')->selectRaw('id, count(*) as count');
}
public function eventsCountAttribute() {
return $this->eventsCountRelation->count();
}
}
答案 0 :(得分:1)
foreach($categories as $categoriy) {
echo $category->name.' ('.$category->events->count().')';
}
返回类似的内容: 喜剧(10) 音乐(5)
如果要在视图中打印它,则无需在控制器中加载它们。 但是如果你想把它打印成json,你需要这样的东西:
$categories = Category::all();
在类别模型中,您需要添加以下内容:
protected $appends = ['counter'];
public function getCounterAttribute() {
return $this->events->count();
}
像这样更新您的课程:
class Categories extends Model implements SluggableInterface
{
use SluggableTrait;
protected $sluggable = [
'build_from' => 'name',
'save_to' => 'slug',
'on_update' => true,
];
protected $appends = [
'counter'
];
protected $table = 'categories';
public function events() {
return $this->hasMany('App\Models\Events', 'category_id');
}
public function eventsCounterAttribute() {
return $this->events->count();
}
}
您不需要更多。