Уже несколько недель я использую подготовленные операторы в PHP с fetch_object(className:: class)
.Мне действительно нравится этот способ из-за автозаполнения в моих контроллерах и в моем представлении (Twig), но иногда мне нужно внутреннее соединение (One to many).
Теперь я делаю это, как показано ниже.К счастью, у меня есть только несколько результатов в проектах, где я использую это, поэтому количество запросов невелико.Но при большом результате это создаст много запросов.Чтобы повысить производительность, я храню $ returnResult в apcu / Redis в контроллере или сохраняю его в файле JSON, когда я не могу использовать другой метод кэширования.
Мой вопрос: могу ли я сделать это лучшеспособ уменьшить количество запросов, но по-прежнему использовать fetch_object(className:: class)
Заранее спасибо за помощь.
public function getAll()
{
// Create database connection
$db = DB::connect();
$stmt = $db->prepare("SELECT * FROM dataroom_category ORDER BY display_order");
$stmt->execute();
$returnResult = [];
$categoryResult = $stmt->get_result();
$stmt2 = $db->prepare("SELECT * FROM dataroom_file WHERE dataroom_category_id = ? ORDER BY display_order");
$stmt2->bind_param('i', $id);
/** @var data $category */
while ($category = $categoryResult->fetch_object(data::class)) {
$id = $category->getId();
$stmt2->execute();
$filesResult = $stmt2->get_result();
while ($file = $filesResult->fetch_object(DataroomFile::class)) {
// Add the file to the setFiles array with $file->getid() as key
$category->setFiles($file);
}
// I noticed by using mysqli_free_result the server used alot less memory at the end
mysqli_free_result($filesResult);
$returnResult[$category->getId()] = $category;
}
mysqli_free_result($categoryResult);
$stmt2->close();
$stmt->close();
// Return the categories with the files for usage in the controller and view
return $returnResult;
}