Запрос отношения базы данных с углеродом в laravel - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь выбрать изображение с наибольшим количеством лайков из категории за предыдущий день. Тем не менее, мой запрос возвращает нулевой результат. Мои фотографии связаны с лайками через полиморфные отношения c.

Вот мой запрос:

$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');
}

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 22 апреля 2020

Попробуйте это:

$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();
...