首页 > 解决方案 > 在 laravel 中查询与 carbon 的数据库关系

问题描述

我正在尝试从前一天的类别中选择最喜欢的图片。但是,我的查询返回空结果。我的图片通过具有许多多态关系与喜欢相关。

这是我的查询:

$foodOfTheDay = Picture::withCount('likes')
        ->where('picture_type', 'food')
        ->whereHas('likes', function($query) {
            $query->whereDate('created_at', Carbon::yesterday());
        })
        ->orderBy('likes_count', 'desc')
        ->with('user')
        ->first();

这是我可爱的关系:

public function likes()
{
    return $this->morphMany('App\Like', 'likeable');
}

感谢您的帮助。

标签: laraveleloquentphp-carbon

解决方案


试试这个:

$foodOfTheDay = Picture::withCount('likes')
        ->where('picture_type', 'food')
        ->whereHas('likes', function($query) {
            $query->whereBetween('created_at', [Carbon\Carbon::yesterday()->startOfDay(), Carbon\Carbon::yesterday()->endOfDay()]);
        })
        ->withCount('likes') // count yesterday's likes
        ->orderBy('likes_count', 'desc')
        ->with('user')
        ->first();

或这个:

$foodOfTheDay = Picture::withCount('likes')
        ->where('picture_type', 'food')
        ->whereHas('likes', function($query) {
            $query->where('created_at', '>=', Carbon::yeserday()->startOfDay())
                  ->where('created_at', '<=', Carbon::yesterday()->endOfDay());
        })
        ->withCount('likes') // count yesterday's likes
        ->orderBy('likes_count', 'desc')
        ->with('user')
        ->first();

两人都应该返回前一天(昨天)点赞最高的图片

此查询选择喜欢最多的图片,而不考虑其他天的喜欢:

$foodOfTheDay = Picture::where('picture_type', 'food')->withCount(['likes' => function($query) {
        $query->whereBetween('created_at', [Carbon::yesterday()- 
>startOfDay(), Carbon::yesterday()->endOfDay()]);
    }])
    ->orderBy('likes_count', 'asc')
    ->with('user')
    ->first();

推荐阅读