[AR][FK][UT] Ошибка при добавлении элемента в БД

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Закрыто
VeroLom
Сообщения: 27
Зарегистрирован: 2012.03.07, 05:04
Откуда: Санкт-Петербург
Контактная информация:

[AR][FK][UT] Ошибка при добавлении элемента в БД

Сообщение VeroLom »

Сделал простой юнит-тест:

Код: Выделить всё

    $newItem = new Item;
    $itemTitle = "New item 1";
    $newItem->setAttributes(
        array(
            'part' => '0000',
            'type_id' => 1,
            'category_id' => 1,
            'title' => $itemTitle,
            'title_template' => 'test',
            'color' => 'black',
            'size' => 40,
            'desc' => 'Test New Item 1',
        )
    );
    $this->assertTrue($newItem->validate()); // Attributes validation
    $this->assertTrue($newItem->save(false));
 
Выполняю phpunit и получаю такое, вот, ругательство:

Код: Выделить всё

CDbException: CDbCommand failed to execute the SQL statement: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`wh_test`.`tbl_item`, CONSTRAINT `fk_goods_type` FOREIGN KEY (`type_id`) REFERENCES `tbl_type` (`id`) ON UPDATE CASCADE). The SQL statement executed was: INSERT INTO `tbl_item` (`part`, `type_id`, `category_id`, `title`, `title_template`, `color`, `size`, `desc`) VALUES (:yp0, :yp1, :yp2, :yp3, :yp4, :yp5, :yp6, :yp7)
/var/www/yii/framework/db/CDbCommand.php:354
/var/www/yii/framework/db/ar/CActiveRecord.php:1014
/var/www/yii/framework/db/ar/CActiveRecord.php:787
/var/www/wh/wh/protected/tests/unit/ItemTest.php:18
При попытке добавить итем вручную в базу, всё успешно добавляется (type_id и category_id добавил, чтобы юнит-тесты проходили, но это уже отдельный вопрос):

Код: Выделить всё

INSERT INTO `tbl_item` VALUES (0, '0000', 1, 1, 'New item 1', '', 'black', 40, 'Test New Item 1', NULL);
Что я делаю не так?

Кусок модели relations():

Код: Выделить всё

    return array(
        'goods' => array(self::HAS_MANY, 'Goods', 'item_id'),
        'type' => array(self::BELONGS_TO, 'Type', 'type_id'),
        'category' => array(self::BELONGS_TO, 'Category', 'category_id'),
        'descTemplate' => array(self::BELONGS_TO, 'DescTemplate', 'desc_template_id'),
    );
 
и создание таблицы:

Код: Выделить всё

CREATE TABLE IF NOT EXISTS `wh`.`tbl_item` ( 
 `id` INT NOT NULL AUTO_INCREMENT, 
 `part` VARCHAR(45) NOT NULL, 
 `type_id` INT NOT NULL, 
 `category_id` INT NOT NULL, 
 `title` VARCHAR(200) NOT NULL , 
 `title_template` VARCHAR(200) NOT NULL , 
 `color` VARCHAR(45) NOT NULL , 
 `size` INT NOT NULL , 
 `desc` TEXT NOT NULL , 
 `desc_template_id` INT NULL , 
 PRIMARY KEY (`id`), 
 CONSTRAINT `fk_goods_type` 
  FOREIGN KEY (`type_id` ) 
  REFERENCES `wh`.`tbl_type` (`id` ) 
  ON UPDATE CASCADE 
  ON DELETE RESTRICT, 
 CONSTRAINT `fk_goods_category` 
  FOREIGN KEY (`category_id` ) 
  REFERENCES `wh`.`tbl_category` (`id` ) 
  ON UPDATE CASCADE 
  ON DELETE RESTRICT, 
 CONSTRAINT `fk_goods_desc_template` 
  FOREIGN KEY (`desc_template_id`) 
  REFERENCES `wh`.`tbl_desc_template` (`id`) 
  ON UPDATE CASCADE 
  ON DELETE RESTRICT 
) ENGINE = InnoDB; 
Последний раз редактировалось VeroLom 2012.03.09, 05:49, всего редактировалось 1 раз.
VeroLom
Сообщения: 27
Зарегистрирован: 2012.03.07, 05:04
Откуда: Санкт-Петербург
Контактная информация:

Re: [AR][FK][UT] Ошибка при добавлении элемента в БД

Сообщение VeroLom »

Неужели, нет идей никаких? :(
esche
Сообщения: 1054
Зарегистрирован: 2010.11.24, 03:39

Re: [AR][FK][UT] Ошибка при добавлении элемента в БД

Сообщение esche »

После

Код: Выделить всё

$newItem->setAttributes(..) 
проверить атрибуты. Валидация режет.
...
Jampire
Сообщения: 207
Зарегистрирован: 2011.01.28, 11:45
Откуда: Гомель
Контактная информация:

Re: [AR][FK][UT] Ошибка при добавлении элемента в БД

Сообщение Jampire »

Фикстуры используются?
Изображение
Человек, говорящий, что это невозможно сделать, не должен мешать тому, кто это делает.
VeroLom
Сообщения: 27
Зарегистрирован: 2012.03.07, 05:04
Откуда: Санкт-Петербург
Контактная информация:

Re: [AR][FK][UT] Ошибка при добавлении элемента в БД

Сообщение VeroLom »

esche писал(а):После

Код: Выделить всё

$newItem->setAttributes(..)
проверить атрибуты. Валидация режет.
Исправил title_template, валидация проходит, но сабж остался.
VeroLom
Сообщения: 27
Зарегистрирован: 2012.03.07, 05:04
Откуда: Санкт-Петербург
Контактная информация:

Re: [AR][FK][UT] Ошибка при добавлении элемента в БД

Сообщение VeroLom »

Jampire писал(а):Фикстуры используются?
Нет, пока только реальная БД.
VeroLom
Сообщения: 27
Зарегистрирован: 2012.03.07, 05:04
Откуда: Санкт-Петербург
Контактная информация:

Re: [AR][FK][UT] Ошибка при добавлении элемента в БД

Сообщение VeroLom »

Jampire писал(а):Фикстуры используются?
Спасибо! :) Забыл добавить поля в тестовую БД.
Закрыто