Я использую laravel 5.1 для разработки CMS. У меня простая структура сообщений, пользователям и пользователям могут нравиться сообщения.Laravel 5.1 - Trending Posts - Запрос на количество отношений с временной отметкой состояния pivot
Я хочу перечислить трендовые сообщения (сообщения с наибольшим количеством просмотров за последние 1 неделю в порядке desc). Сообщения и пользователи имеют отношение «многие-ко многим» и используют сводную таблицу для отношений.
Сообщение Модель имеет
public function likedby()
{
return $this->belongsToMany('App\Models\User','user_like_post')
->withTimestamps();
}
пользователя Модель имеет
public function likes(){
return $this->belongsToMany('App\Models\Post','user_like_post')
->withTimestamps();
}
Как я могу написать красноречивый запрос, поэтому я получать простирание поста. Мне нужно использовать временную метку сводной таблицы, которую мне трудно использовать.
Это то, что я пробовал, но он использовал 'created_at' таблицы столбиков, а не сводной таблицы.
$trending = Post::with('likedby')->get()
->sortByDesc(function ($post){
$one_week_ago = Carbon::now()->subWeeks(1);
return $post->likedby
->where('created_at','>=',$one_week_ago)
->count();
}
);
Я думаю, что я нужен первый один, но он дает мне ошибку - «Целостность нарушение ограничения: 1052 Колонка„created_at“в, где положение является неоднозначным» - это не в состоянии понять, какие «created_at» это должно быть с помощью. – Aakash
Странно, что закрытие использует только запрос отношения. Вы делаете что-нибудь еще в основном запросе 'Post', который может это сделать? –
Я решил это, поставив 'user_like_post.created_at' в where where, чтобы указать, какой create_at будет использоваться. Благодарю. – Aakash