Код ниже используется для отображения таблицы с 15 результатами на странице. Для этого я использую две разные базы данных, одна - база данных WordPress, другая - личная база данных, которую я создал.
Первый запрос используется для получения значений таблицы из базы данных WordPress, но это не так. не получить имя пользователя, так как WordPress хранит только идентификатор пользователя в этой таблице. Единственное место, где у меня есть правильное имя пользователя, находится в моей второй личной базе данных.
Для этого я использовал foreach l oop, чтобы заменить идентификаторы для имен пользователей. Итак, внутри l oop есть новый запрос, используемый для получения имен пользователей.
Моя проблема в том, что при каждой загрузке страницы я выполняю 16 запросов к БД одновременно поэтому он делает 16 запросов к базе данных, и это замедляет мою страницу.
public function index() {
$posts = DB::connection('mysql2')
->table('wp_rocketsciencebrposts')
->select('ID', 'post_title', 'post_status', 'post_author', 'post_date')
->whereIn('post_status', ['publish', 'private'])
->where('post_type', 'post')
->orderBy('id', 'desc')
->paginate(15, ['*'], 'posts');
$posts = compact('posts');
foreach($posts['posts'] as &$value){
//this DB Query is making my page slow, since it's inside this foreach loop, therefore, making 16 database requests
$value->post_author = DB::connection('mysql')
->table('users')
->select('name')
->where('rsbwordpressid', $value->post_author)
->value('name');
}
return view('posts/posts', $posts);
}
Я уверен, что решение очень простое, но я не могу придумать стратегию о том, как поместить второй запрос к БД за пределами l oop, избегая всех ненужных запросов к базе данных.
Pls, help.