您好,我有以下代码块:
$categories = EventCategory::select('id', 'name', 'thumbnail_url', 'slug')
->with(['events' => function ($query) {
$query->whereRaw("DATE_FORMAT(`sales_end_date`, '%Y-%m-%d') >= DATE_FORMAT(curdate(), '%Y-%m-%d')")
->whereRaw("DATE_FORMAT(`date`, '%Y-%m-%d') >= DATE_FORMAT(curdate(), '%Y-%m-%d')")
->count();
}])
->where('is_active', 1)
->get();
现在它的作用是返回一个事件类别列表,但是我希望它返回每个类别中所有事件的计数。
上面的代码只返回包含所有事件的所有类别,而不仅仅是计数。
我在我的模型中使用了其他的东西,但是我无法在其上应用where
条款,而且我不想在我的模型中添加where
条款首先:
class EventCategory extends Model implements SluggableInterface
{
use SluggableTrait;
protected $sluggable = [
'build_from' => 'name',
'save_to' => 'slug',
'on_update' => true,
];
protected $table = 'event_categories';
//protected $appends = ['counter'];
public function events() {
return $this->hasMany('App\Models\EventDetails', 'category_id');
}
public function getCounterAttribute() {
return $this->events->count();
}
}
答案 0 :(得分:0)
foreach($categories as $category)
{
$category->event_count = count($category->events);
}
您的自定义SQL应该构建在关系中,而不是您的特定实例,如果建议的关系逻辑:
$query->whereRaw("DATE_FORMAT(`sales_end_date`, '%Y-%m-%d') >= DATE_FORMAT(curdate(), '%Y-%m-%d')")
->whereRaw("DATE_FORMAT(`date`, '%Y-%m-%d') >= DATE_FORMAT(curdate(), '%Y-%m-%d')")
->count();
仅适用于网站的一个功能,那么您应该将该功能构建到模型接口(存储库)中以覆盖"关系的默认功能。
参考: Laravel - many-to-many where the many-to-many table is (part-) polymorph