PEAR:DB_NestedSet кто-нибуть юзает?

crocodile2u

http://vbolshov.org.ru
Ну, Notice: Undefined index: rootid in C:\php\PEAR\DB\NestedSet.php on line 701 - это, я так понимаю, из-за несоответствия имен полей реальным полям.

rootid != root_id.

О! Это ж я тебя ненароком в заблуждение ввел:

PHP:
$params = array(
    'id'        => 'id',
    'root_id' => 'rootid',// на этой строке было "'root_id' => 'root_id',", исправь
    'cleft'   => 'l',
    'cright'  => 'r',
    'norder' => 'norder',
    'level'     => 'level',
    'title'      => 'name',
    'parent'    => 'parent'
);
Как посмотреть, что за ошибка:

PHP:
/**
 * Callback function to handle PEAR errors
 *
 * @param PEAR_Error $error
 * @return void
 */
function pear_error_handler(PEAR_Error $error) {
	die($error->getMessage()."\n".$error->getUserInfo());
}

// override default PEAR error handling for debug purposes
PEAR::setErrorHandling(REAR_ERROR_CALLBACK, "pear_error_handler");
Этот код нужно поставить в начале скрипта.

Насчет статьи - не думаю, что у меня что-то получится раньше, чем через месяц - это во-первых. Ну и еще - не знаю, насколько она будет нужной. Например, на форуме клуба вопросы по этому пакету задают не так уж и часто.
 

Mike Klemin

Новичок
Могу задавать каждый день вопросы по пирдбтри, если это поможет. Вещь очень нужная, времени и мозгов разбираться совсем нет, поэтому за доступный мануал, как по пшпдбтии был бы очень признателен.
 

crocodile2u

http://vbolshov.org.ru
Mike Klemin
Исправь плз - "пирдбтри" - на "пшпдбтри" (везде). А то я уже полез на pear.php.net узнавать, что за пакет PEAR::DB_Tree :)

PS. К сожалению, phpdbtree не юзал никогда...
 

he][es

Новичок
crocodile2u такая фигня: structura_rashodov_id_seq - это как я понял таблица секьюенсов (или как их там), а если она мне никуда не впилась?.. Если у меня auto_increment в MySQL и Identity(1,1) в MS SQL??? Как нить от неё избавиться можно?..
(форум сволочь не прислал сообщение о обновлении темы!)
 

crocodile2u

http://vbolshov.org.ru
Если юзать DB_NestedSet, то никак. Вообще - эта фишка лично мне очень не нравится... Необоснованное захламление базы ненужными таблицами + лишний запрос при вставке (DB::nextID($sequence_name)). Для PostgreSQL - другое дело, а вот в мускуле могли бы как-то по-другому решить...
 

he][es

Новичок
crocodile2u :/ Блин... А что с ними и как делать?.. Т.е. есть у меня база, заполненая. Сикьюенсов нет. КАк им сказать, что нужно начинать не с 1,а с 56?..

-~{}~ 21.09.05 08:46:

Может его переписать по этому поводу?.. (Отрезать - не пришить... :D )
 

kvf77

Red Devil
he][es

ну залезь в таблицу сиквенсов и вручную выставь нужную стартовую позицию - в чем проблема?
 

crocodile2u

http://vbolshov.org.ru
he][es
Переписывать - не слишком хорошая идея. Найдется в пакете баг - придется скачивать новыю версию - снова переписывать?

[sql]
ALTER TABLE sequence_table AUTO_INCREMENT = 56;
[/sql]

Для мускуля, по-моему, так...
 

he][es

Новичок
ОК, понля.
Ну... Поправить пару строк не сильно сложно... Я думаю это не оч. глубоко будет... (сам боюсь не допру по быстрому :D )
 

crocodile2u

http://vbolshov.org.ru
he][es
Не, ну хочется - переписывай :))

У меня к тебе другой вопрос:
ты этот пакет с MSSQL юзаешь? Глюков нет? А то, как я понимаю, он в основном для MySQL все же. По крайней мере слышал, что в постгре он весьма неадекватно себя себя ведет.

-~{}~ 21.09.05 15:44:

Если тебе совет нужен, как переписать - то, видимо, переписывать придется только методы создания нод (createSubNode, createRootNode, createLeftNode, createRightNode).

Есть там такие вызовы - nextID($sequence_name);

Потом полученный айди вставляется в запрос. Вот эту часть и надо будет переписать...
 

kvf77

Red Devil
he][es
ну я выложил новую версию своей либы - попробуй - может получится и покажется удобным - теперь есть отвязка от ADODB и GetText - так что юзай хоть напрямую с MsSql хоть через PEAR

опятьже я написал подробнейшую доку по либе и кучу примеров толковых. что касается ее стойкости - то уже ни один год мною юзается вроде все фатальные глюки выловил
 

he][es

Новичок
crocodile2u угу с ним самым... Вроде ничего... Работает.. (только ой как я помучаося при переходе с MySQLя MS - говно! :D )
Глюков вроде нет, но я оч. премитивно его юзаю...
А то, как я понимаю, он в основном для MySQL все же.
ну PEAR:: DB всё же...
(Сейчас вот какой то затык с транзакциями возник... Наз-ся регулярно обновляйте маны!.. Ну это оффтоп уже...)
kvf77 ок, качну посмотрю... Я вот как видите на PEAR:: DB_NestedSet перелезть успел... (Во! А у вас самых сикьюенсов же нет?)
 

kvf77

Red Devil
he][es
очень даже есть :)

сиквенсы это крайне полезная штука, значительно облегчающая жизнь - рекомендую ими пользоваться
 

crocodile2u

http://vbolshov.org.ru
kvf77
Сиквенсы - штука полезная, например, в PostgreSQL, где это - встроенный механизм. А вот в MySQL - это, имхо, лишнее, и лучше было бы использовать AUTO_INCREMENT. Например, я недавно писал класс для работы с деревьями, правда, то были adjacency lists, и написал без исполльзования сиквенсов в MySQL, но с возможностью использования и в postgre/другой БД.
 

kvf77

Red Devil
crocodile2u

во-первых, сиквенсы правильнее идеологически - всеравно как они организованы (во всяком случае считаю это крайне удобным), во-вторых, вашего autoincrement нету в половине баз, так что сиквенсы - это суть есть организация нормальной совместимости

с другой стороны - мой класс позволяет обойтись без виквенсов - для этого надо всего лишь переопределить функцию генерации уникального ID записи - и никаких проблем не будет - я в эту сторону сделал очень серьезные усовершенствования без потери обратной совместимости либы - так тчо не нравятся сиквенсы - просто не используйте их :)
 

crocodile2u

http://vbolshov.org.ru
Вот это хорошо, что можно обойтись без них.

Я, собсно, имел в виду, что пользоваться нужно тем, что предоставляет БД. Сиквенсы в MySQL - это скорее костыль, чем идеологически верное решение.
 

kvf77

Red Devil
crocodile2u
это справедливо, если ты тока с мускулем работаешь - я вот нет :)
ну решение я дал - теперь кто захочет - будт его юзать
 

crocodile2u

http://vbolshov.org.ru
Зачем в PEAR::DB придумали nextID() - для всех БД? Для того, чтобы абстрагироваться от выбора этой самой БД. Отсюда - в DB_NestedSet, даже при выборе в качестве БД MySQL - используются сиквенсы, хотя необходимости в этом нет.

По-моему же, этот подход как раз идеологически неверен! Например, мой класс для adjacency lists использует сиквенсы в случае PostgreSQL, и не использует - в случае MySQL. Мне это кажется лучшим решением. Таким образом мы используем возможности базы, и не делаем лишних запросов, не создаем лишних таблиц, в тех случаях, когда в этом нет еобходимости.
 

he][es

Новичок
kvf77 оч. жаль... :/ Чем же они так полезны? autoincrement куда правильнее (ИМХО)...
Например, мой класс для adjacency lists использует сиквенсы в случае PostgreSQL, и не использует - в случае MySQL.
Полностью согласен!..
Не понимаю я создателей БД. autoincrement (опять же таки ИМХО) очень нужная и правильная штука!.. Что есть сиквенсы по сути своей? Тот же autoincrement только ч/з .опу...
 

[DAN]

Старожил PHPClub
Вообще-то Sequence - это стандарт SQL.
Только вот мускуль решил выперндриться и типа "облегчить жизнь" пользователям.
Мой совет: юзайте нормальные СУБД, и будет вам счастье ;)
 
Сверху