/** * @param $sql * @param array $params * @param string $class * @return bool|mixed */ public static function result($sql, $params = [], $class = 'stdClass') { $res = _db::query($sql, $params); if ($res) { return _db::fetch($res, $class); } return false; }
$sql_arr = []; $key_arr = []; foreach ($keys as $old => $new) { if (is_array($new)) { $sql_arr[] = '`' . $new[1] . '`'; } else { $sql_arr[] = '`' . $new . '`'; } $key_arr[] = ':' . $old . '_[id]'; } $base_sql = 'INSERT INTO ' . $table . ' (' . implode(', ', $sql_arr) . ') VALUES '; $key_set = '(' . implode(', ', $key_arr) . ')'; $part_cnt = 0; $cnt = 0; $params = []; while ($row = db::fetch($res)) { $cnt++; $part_cnt++; $sql_sets[] = str_replace('[id]', $part_cnt, $key_set); foreach ($keys as $old => $new) { if (is_array($new)) { $params[$old . '_' . $part_cnt] = $new[0]($row->{$old}); } else { $params[$old . '_' . $part_cnt] = $row->{$old}; } } if ($part_cnt == 500) { $statement = db::$con->prepare($base_sql . implode(',', $sql_sets)); $statement->execute($params); echo '<p>' . $cnt . ' rows imported.</p>'; $params = [];
/** * @param string $class * @param array $fields_to_retrieve * @param array $options */ public function get_all($class, array $fields_to_retrieve, $options = []) { $this->fields = $fields_to_retrieve; $this->options = $options; $this->class = $class; /** @var table $obj */ $obj = new $class(); $links = []; $mlinks = []; $obj->set_default_retrieve($fields_to_retrieve, $options); table::organise_links($obj, $fields_to_retrieve, $links, $mlinks); $dependencies = [get::__class_name($class)]; foreach ($links as $module => $link_info) { $field = $link_info['field']; $retrieves = $link_info['retrieve']; $dependencies[] = get::__class_name($module); $options['join'][$module] = $module . '.' . $field->field_name . '=' . $obj->class_name() . '.' . $field->field_name; foreach ($retrieves as $retrieve) { $fields_to_retrieve[] = $module . '.' . $retrieve; } } $key = 'get_all_' . $class . '_fetch_' . implode(',', $fields_to_retrieve) . '_options_' . serialize($options); $elements = \classes\cache::grab($key, function () use($class, $fields_to_retrieve, $options, $links, $mlinks, $obj) { if (!isset($options['order'])) { $options['order'] = get::__class_name($class) . '.position'; } $select = _db::get_query($class, $fields_to_retrieve, $options); $res = $select->execute(); if (_db::num($res)) { $row = _db::fetch($res, null); $mappings = $obj->get_field_mappings(array_keys($row)); do { /** @var table $class */ $object = new $class(); $object->set_from_row($row, $links, $mappings); foreach ($mlinks as $module => $blah) { $object->{$module . '_elements'} = new \classes\table_array(); $object->{$module} = new _collection(); } $this[] = $object; } while ($row = _db::fetch($res, null)); } $this->reset_iterator(); foreach ($mlinks as $module => $link_info) { /** @var \form\field_link $field */ $field = $link_info['field']; $retrieves = $link_info['retrieve']; $retrieves[] = 'l.' . $obj->get_primary_key_name() . ' AS linked_id'; $sub_class = $field->get_link_object(); $classes = $sub_class::get_all($retrieves, ['join' => [get::__class_name($class) . '_link_' . get::__class_name($sub_class) . ' l' => 'l.link_' . $sub_class->get_primary_key_name() . '=' . get::__class_name($sub_class) . '.' . $sub_class->get_primary_key_name()], 'where' => 'l.' . $obj->get_primary_key_name() . ' IN(' . implode(',', $this->get_table_keys()) . ')']); /** @var table $sub_object */ foreach ($classes as $sub_object) { $object = $this->find_table_key($sub_object->linked_id); if ($object) { $object->{$module . '_elements'}->push($sub_object); $object->{$module}->push($sub_object->get_primary_key()); } } } return $this->exchangeArray([]); }, $dependencies); $this->exchangeArray($elements); }
/** * @param array $fields * @param array $options * * @return bool */ public function do_retrieve(array $fields, array $options) { self::set_cms_modules(); $options['limit'] = 1; $this->set_default_retrieve($fields, $options); $links = $mlinks = []; table::organise_links($this, $fields, $links, $mlinks); foreach ($links as $module => $link_info) { $field = $link_info['field']; $retrieves = $link_info['retrieve']; $options['join'][$module] = $module . '.' . $field->field_name . '=' . $this->class_name() . '.' . $field->field_name; foreach ($retrieves as $retrieve) { $fields[] = $module . '.' . $retrieve; } } $query = _db::get_query(get_class($this), $fields, $options); $res = $query->execute(); if (_db::num($res)) { $row = _db::fetch($res, null); $this->set_from_row($row, $links, $this->get_field_mappings(array_keys($row))); } /** @var field_link $field */ foreach ($mlinks as $module => $fields) { $this->retrieve_link($fields['field'], $fields['retrieve']); } return $this->get_primary_key(); }