Laravel 7, в котором запрос возвращает только первый индекс

#laravel

#laravel

Вопрос:

У меня есть приложение laravel, в котором я пытаюсь отобразить все сообщения от всех пользователей на главной индексной странице. Однако у меня возникают проблемы при попытке запросить все сообщения от всех пользователей. приведенный ниже код получает только все сообщения от первого пользователя.

Вот запрос

 //grab all users from the database and store it in the users variable
$users = User::all();
//grab all posts from all users. list by most recent in descending order store in recentPosts variable
$recentPosts = Post::whereIn('user_id', $users)->paginate(32);
//return the view with the varibles
return view('index', compact('recentPosts'));
  

Вот dd($users);

Вот dd($recentPosts);

вот моя база данных с 2 сообщениями от 2 отдельных пользователей Здесь

Ответ №1:

$users это коллекция, а не массив. Вам нужно получить массив для использования whereIn . Может быть, вы можете использовать метод pluck:

 $recentPosts = Post::whereIn('user_id', $users->pluck('id'))->paginate(32);
  

Комментарии:

1. @OMR Да, вы правы, но его можно использовать в Where. потому что это IlluminateSupport Collection, который возвращает значение, подобное array.

Ответ №2:

исправьте этот whereIn() массив запросов, чтобы вы могли использовать эту ссылку https://laravel.com/docs/8.x/queries#where-clauses

и pluck() чтобы получить все userId https://laravel.com/docs/8.x/collections#method-pluck

 $userIds = User::all()->pluck('id')->toArray();
//grab all posts from all users. list by most recent in descending order store in recentPosts variable
$recentPosts = Post::whereIn('user_id', $userIds)->paginate(32);