Есть ли лучший способ получить несколько объектов в PHP? - PullRequest
0 голосов
/ 21 мая 2019

Уже несколько недель я использую подготовленные операторы в 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;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...