Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
Watched Topics
FAQ
Поиск
Пользователи
Группы
Регистрация
Профиль
Войти и проверить личные сообщения
Вход
Список форумов Cake-PHP.ru
->
Общий
Ответить
Имя
Тема
Сообщение
Смайлики
Дополнительные смайлики
Цвет шрифта:
По умолчанию
Тёмно-красный
Красный
Оранжевый
Коричневый
Жёлтый
Зелёный
Оливковый
Голубой
Синий
Тёмно-синий
Индиго
Фиолетовый
Белый
Чёрный
Размер шрифта:
Размер шрифта
Очень маленький
Маленький
Обычный
Большой
Огромный
Закрыть теги
[quote="Anonymous"][quote="DeeperMD"]Да.. лучьше используйте ассоциативную модель Пирожка, там уже это встроенно до 3-х вложений[/quote] Уточните, пожалуйста, что подразумевается под "ассоциативная модель Пирожка"? можно поподробнее. спасибо![/quote]
Настройки
HTML
ВЫКЛЮЧЕН
BBCode
ВКЛЮЧЕН
Смайлики
ВКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
Если у вас плохое зрение или вы не можете прочесть этот код по какой-то другой причине, то обратитесь за помощью к
Администратору
.
Код подтверждения: *
Введите код в точности так, как вы его видите. Код является регистро-зависимым, а символ нуля имеет косую линию внутри цифры.
Часовой пояс: GMT + 3
Перейти:
Выберите форум
CakePHP Форум
----------------
Общий
Установка и настройка
Творчество
Вопросы и пожелания
Комментарии к главам руководства по CakePHP 1.1
Обзор темы
Автор
Сообщение
DeeperMD
Добавлено: 08 Май 2008 13:02:21
Заголовок сообщения:
пробовали использовать встроеные функции Пирожка, что я вам указал?
nr7
Добавлено: 08 Май 2008 09:55:59
Заголовок сообщения:
проверил запросы к базе данных, самое интересное что удаляется только одна запись с id = 1, хотя в очереди она 3-я на удаление..короче запутался окончательно. У вас есть какие-то мысли по этому поводу?
Код:
DELETE `PropertyTree` FROM `properties_tree` AS `PropertyTree` LEFT JOIN `properties_names` AS `PropertyName` ON (`PropertyName`.`property_id` = `PropertyTree`.`property_id`) LEFT JOIN `properties_to_categories` AS `PropertyToCategory` ON (`PropertyToCategory`.`property_id` = `PropertyTree`.`property_id`) WHERE `PropertyTree`.`property_id` IN (2)
SELECT COUNT(*) AS `count` FROM `properties_tree` AS `PropertyTree` WHERE `PropertyTree`.`property_id` = 3
DELETE `PropertyTree` FROM `properties_tree` AS `PropertyTree` LEFT JOIN `properties_names` AS `PropertyName` ON (`PropertyName`.`property_id` = `PropertyTree`.`property_id`) LEFT JOIN `properties_to_categories` AS `PropertyToCategory` ON (`PropertyToCategory`.`property_id` = `PropertyTree`.`property_id`) WHERE `PropertyTree`.`property_id` IN (3)
SELECT COUNT(*) AS `count` FROM `properties_tree` AS `PropertyTree` WHERE `PropertyTree`.`property_id` = 1
DELETE `PropertyTree` FROM `properties_tree` AS `PropertyTree` LEFT JOIN `properties_names` AS `PropertyName` ON (`PropertyName`.`property_id` = `PropertyTree`.`property_id`) LEFT JOIN `properties_to_categories` AS `PropertyToCategory` ON (`PropertyToCategory`.`property_id` = `PropertyTree`.`property_id`) WHERE `PropertyTree`.`property_id` IN (1)
DeeperMD
Добавлено: 07 Май 2008 18:03:39
Заголовок сообщения:
Цитата:
del
* string $id
* boolean $cascade
Удаляет модель, выбранную по $id.
Если эта модель ассоциирована с другими моделями, и ключ зависимости был установлен в ассоциативном массиве, этот метод также удалил те ассоциативные модели, если $cascade присвоено значение true.
Возвращает true при успешном выполнении.
Гость
Добавлено: 07 Май 2008 17:40:30
Заголовок сообщения:
DeeperMD писал(а):
Да.. лучьше используйте ассоциативную модель Пирожка, там уже это встроенно до 3-х вложений
Уточните, пожалуйста, что подразумевается под "ассоциативная модель Пирожка"? можно поподробнее. спасибо!
Гость
Добавлено: 07 Май 2008 17:37:40
Заголовок сообщения:
To AriaL:
спасибо, попробывал твой вариант. Но, к сожалению, не заработало! На вход поступает массив с группой ids, но кроме первой записи ничего не удаляет
Может ли быть причина в неправильном описание схемы базы данных в моделях?
Код:
$ids =
Array
(
[0] => 2
[1] => 3
[2] => 1
)
foreach ($ids as $id) {
$this->PropertyTree->del($id);
}
DeeperMD
Добавлено: 07 Май 2008 17:30:05
Заголовок сообщения:
Да.. лучьше используйте ассоциативную модель Пирожка, там уже это встроенно до 3-х вложений
AriaL
Добавлено: 07 Май 2008 16:55:07
Заголовок сообщения:
Хмм... могу предложить немного другой вариант рекурсии на примере иерархии меню (menu_id - поле, хранящее ID предка)
Код:
/**
* Выстраивает рекурсивную последовательность из всех потомков для заданного ID.
* @param $curr_id - текущий ID
* @param array $ids - массив ID, в который будут добавляться ID потомков
*/
function recurse($curr_id,&$ids){
// получаем всех потомков для текущего элемента
$this->Menu->recursive = 0;
$_childs = $this->Menu->findAll("menu_id=".$curr_id,"id");
$childs = array();
// преобразуем перечень потомков в обычный список
foreach ($_childs as $_child) {
array_push($childs,$_child["Menu"]["id"]);
}
// для каждого из потомков выполним ту же операцию...
if($childs != null){
foreach ($childs as $child) {
$this->recurse($child,$ids);
}
}
// а если мы попали сюда, значит потомков нет, это меню нижнего уровня и его можно добавлять
// в список на удаление. Ну а дальше - рекурсивный возврат
array_push($ids,$curr_id);
}
Использование в удалении:
Код:
$ids = array();
$this->recurse($id,$ids);
foreach ($ids as $id) {
$this->Menu->del($id);
}
nr7
Добавлено: 07 Май 2008 14:36:26
Заголовок сообщения: Рекурсивное удаление данных. Странное поведение функции!!
Привет, ребята! Если есть минутка, помогите, пожалуйста, решить проблему. Уже 3 часа над ней бьюсь, не могу понять причину не работы. Ситуация следующая: есть функция delete_product_property, она рекурсивно удаляет записи в таблице. Когда я вызываю её из другой функции, рекурсия проходит хорошо по всем записям, но вызов $this->PropertyTree->deleteAll() приводит к удалению только первой записи, все остальные не удаляются. Когда же вызов фукнции идет с адресной строки, удаление срабатывает корректно! В чем я ошибаюсь или это глюк???
function delete_product_property($property_id){
$this->PropertyTree->deleteAll('PropertyTree.property_id='.$property_id);
$children = $this->PropertyTree->findAll('PropertyTree.parent_id='.$property_id);
foreach($children as $key=>$value)
if(isset($value['PropertyTree']['property_id'])) $this->delete_product_property($value['PropertyTree']['property_id']);
}
Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB
Если ничего интересного не нашли, можно рекламу почитать, а рекламируется у нас сегодня «».