Laravel подзапрос - PullRequest
       1

Laravel подзапрос

0 голосов
/ 28 февраля 2020

У меня есть база данных, которая выглядит следующим образом: 100

изображения ?

| id            | name          | src         | status    |
| ------------- |---------------| ------------| ----------|
| 1             | nice sun set  | 1020288.jpg | published |
| 2             | poor sun set  | 1120288.jpg | published |
| 3             | best sun set  | 3120288.jpg | deleted   |
| ------------- |---------------| ------------| --------- |

image_views ?

| id            | image_id      | browser_id? | created_at         |
| ------------- |---------------| ------------ | ------------------ |
| 1             | 2             | 1020288e3221 |2020-02-23 13:55:11 |
| 2             | 1             | 1120288221ww |2020-02-27 13:50:51 |
| ------------- |---------------| ------------ | ------------------ |

Теперь в моем laravel приложении

Я хочу получить наиболее просматриваемое изображение в PAST за последние 7 дней.

( я хочу иметь столбец image_views, и эти представления ? должны быть сгруппированы по идентификатору браузера ).

, вот что я попробовал: ??

$image_views = DB::table('image_views')
                        ->selectRaw('count(*) as view_count')
                        ->where(function($query){
                            $query->where('image_views.image_id', 'images.id');
                            $query->whereDate('image_views.created_at', '>=',  Carbon::now()->subDays(7)->toDateTimeString() );
                        });

$image = Image::select(['images.*', DB::raw('(' . $image_views->toSql() . ') as views ')])
->limit(1)
->orderBy('views', 'desc')
->where('images.status','published')
->mergeBindings($image_views)
->get();

return $image;

Так что, к сожалению, приведенный выше код не работает?

Он возвращает только пустые результаты.

Кстати у меня есть много просмотров в таблице image_views, начиная с 2⃣0⃣1⃣9⃣ до настоящего времени , просто я не могу опубликовать все здесь ..


СМЕШНО, ЧТО ЭТО, ЕСЛИ Я СЧИТАЮ ЕГО SQL И вставьте его в PHPMYADMIN. ЭТО РАБОТАЕТ, КАК ОЧАРОВАТЬ

return $image->toSql();
//->mergeBindings($image_views)
//->get();

ПОЖАЛУЙСТА, КТО-ТО СКАЖИТЕ МНЕ, ЧТО Я ДЕЛАЮ НЕПРАВИЛЬНО В LARAVEL !! ?

1 Ответ

1 голос
/ 28 февраля 2020

Дано images & image_views таблиц

enter image description here

enter image description here

$mostViewdImage = DB::table('image_views')
->join('images', 'image_views.image_id', '=', 'images.id')
->select('browser_id', DB::raw('count(image_id) as occurrence'), 'images.*')
->where('image_views.created_at', '>=', Carbon::now()->subDays(7)->toDateTimeString())
->groupBy('image_id', 'browser_id')
->orderByRaw('occurrence DESC')->first();

dump($mostViewdImage);

//Output

"select `browser_id`, count(image_id) as occurrence, `images`.* from `image_views` inner join `images` on `image_views`.`image_id` = `images`.`id` where `image_views`.`created_at` >= ? group by `image_id`, `browser_id` order by occurrence DESC limit 1" (2.02 s)

{#261 ▼
    +"browser_id": "1020288e3221"
    +"occurrence": 2
    +"id": 2
    +"name": "poor sun set"
    +"src": "1120288.jpg"
    +"status": "published"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...