private static function updateSortNames(Context $ctx) { $ctx->db->beginTransaction(); $sel = $ctx->db->prepare("SELECT id, name FROM `node` WHERE `name_lc` IS NULL"); $upd = $ctx->db->prepare("UPDATE `node` SET `name_lc` = ? WHERE `id` = ?"); for ($sel->execute(); $row = $sel->fetch(PDO::FETCH_ASSOC);) { $upd->execute(array(Query::getSortName($row['name']), $row['id'])); } $ctx->db->commit(); }
/** * Упаковывает ноду для сохранения в БД. */ private function pack() { $fields = $extra = array(); foreach ($this->data as $k => $v) { // Числовые ключи игнорируем. if (is_numeric($k)) { continue; } if (!empty($v)) { if ($v instanceof Node) { Logger::log("pack[{$this->id}] » {$v->id}({$v->name})", 'update'); if (null === $v->id) { $v->save(); } // Запрещаем ссылки на себя. if ($this->id == $v->id) { continue; } $this->onSave("DELETE FROM `node__rel` WHERE `tid` = %ID% AND `key` = ?", array($k)); $this->onSave("REPLACE INTO `node__rel` (`tid`, `nid`, `key`) VALUES (%ID%, ?, ?)", array($v->id, $k)); } elseif (self::isBasicField($k)) { $fields[$k] = $v; } elseif ('xml' == $k) { } else { $extra[$k] = $v; } } elseif ('published' == $k or 'deleted' == $k) { $fields[$k] = 0; } } $fields['data'] = serialize($extra); $fields['name_lc'] = Query::getSortName($this->name); return $fields; }