/** * @param string $q * @param bool $protect * @return Iterator */ function q_assoc_iterator($q, $protect = true) { return SQL::q_assoc_iterator($q, $protect); }
/** * @param bool $skip_objects_creation - true if no need to create objects * @param bool $skip_changed_fields - skip update of changed fields * @return $this */ protected function collectObjects($skip_objects_creation = false, $skip_changed_fields = false) { $sql = $this->getSelectSql(); if ($this->last_used_sql && $sql === $this->last_used_sql) { // Skip queries - nothing changed return $this; } $this->last_used_sql = $sql; // Check cache for this exact collection if ($this->use_cache) { //Check cached values, set local properties $data = Cacher::getInstance()->getDefaultCacher()->get($this->getCacheKey($sql)); if ($data && is_array($data) && isset($data['collected_objects_data'], $data['collected_objects'])) { // Set local data $this->collected_objects_data = $data['collected_objects_data']; $this->collected_objects = $data['collected_objects']; // No further actions return $this; } } // Use Iterator in DB query if ($this->use_iterator) { $this->collected_objects_data = SQL::q_assoc_iterator($sql, false); } else { $this->collected_objects_data = SQL::q_assoc($sql, false); } if ($this->require_to_count_total_rows) { $this->total_count_rows = q_value('SELECT FOUND_ROWS();'); } $this->collected_objects = []; // Reset objects if (!$skip_objects_creation) { // Need to create objects from array data foreach ($this->collected_objects_data as $v) { $class = $this->getObjectClass(); /** @var Entity $obj */ $obj = new $class(); // Prevent auto-query db, skip tables with no id field $id = $v['id']; unset($v['id']); // Set object data $obj->loadDataFromArray($v, $skip_changed_fields); // Set current ID $obj->setId($id, false); // Save in returning array ob objects $this->collected_objects[] = $obj; } } if ($this->use_cache) { // Save all collected data to Cache $data = ['collected_objects_data' => $this->collected_objects_data, 'collected_objects' => $this->collected_objects]; Cacher::getInstance()->getDefaultCacher()->set($this->getCacheKey($sql), $data, $this->cache_ttl); } return $this; }