有没有更好的方法来获取PHP中的多个对象?

时间:2019-05-21 10:13:17

标签: php mysqli prepared-statement

几周以来,我在fetch_object(className:: class)中使用了PHP中的预处理语句。我真的很喜欢这种方式,因为在我的控制器和视图(Twig)中都是自动完成的,但是有时候我需要一个内部联接(一对多)。

现在我像下面那样做。幸运的是,在我使用该项目的项目中,我只有少数结果,因此查询数量很少。但是总的来说,这将创建很多查询。为了提高性能,我将$ 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;
  }

0 个答案:

没有答案