CakePHP удалить не каскадно. Вызывает ошибку внешнего ключа - PullRequest
0 голосов
/ 14 июня 2011

У меня есть таблица с именем custom_carts, и у меня есть таблица с именем custom_cart_items.

custom_cart_items имеет внешний ключ с именем custom_cart_id, для которого установлено значение custom_cart.id

В соответствии с Cake Manual , когда вы вызываете Model-> delete (), первый параметр - это идентификатор записи, которую вы хотите удалить, а второй - каскадное удаление зависимых записей или нет.

Поэтому, когда я звоню $this->CustomCart->delete(7,true), я получаю эту ошибку:

Ошибка SQL: 1451: Невозможно удалить или обновить родительскую строку: сбой ограничения внешнего ключа (krake.custom_cart_items, CONSTRAINT custom_cart_items_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (custom_cart_id) ССЫЛКИ custom_carts (id))

Вот запрос:

DELETE `CustomCart` 
FROM `custom_carts` AS `CustomCart` 
LEFT JOIN `users` AS `User` 
ON (`CustomCart`.`user_id` = `User`.`id`)  
WHERE `CustomCart`.`id` = 25 

Shouldn ' * Каскад и удалить другую запись?

Так почему я получаю сообщение об ошибке?

Ответы [ 3 ]

5 голосов
/ 17 июня 2011

Необходимо установить для параметра зависимый значение true в модели с отношением hasmany , чтобы включить каскадное удаление.

Ваша модель будет выглядеть примерно так:

class CustomCart extends AppModel {
         var $name = 'CustomCart';
         var $hasMany = array(
         'CustomCartItem' => array(
             'dependent'=> true
         )
);
}

см. http://book.cakephp.org/view/82/hasMany

0 голосов
/ 06 марта 2012

С другой стороны, если вы хотите удалить запись из таблицы A, и есть другая таблица B, которая в качестве ограничения FOREIGN KEY для таблицы A, вы должны установить параметр для этого внешнего ключа таблицы B в База данных, как это "УСТАНОВИТЬ НУЛЬ НА УДАЛИТЬ".

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

0 голосов
/ 15 июня 2011

Простое добавление полей в таблицу (независимо от имени поля) не сообщает CakePHP, что они связаны, и не связывает их для каскадного удаления.

Вам необходимо установить ассоциации в вашей модели: СМ. ДЕТАЛИ ЗДЕСЬ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...