[BUCH] Yii1.1 Agile Development - Probleme

Hallo,

ich bin grad in Kapitel 6 und habe diverse Probleme mit den Fremschlüsseln. Leider konnte mir im englischen Forum niemand weiterhelfen, daher wende ich mich an euch.

Ich bin in Kapitel 6 und habe den mysql-dump von der Webseite vom Buch eingespielt.




-- Disable foreign keys

SET FOREIGN_KEY_CHECKS = 0 ;


-- Create tables section -------------------------------------------------


-- Table tbl_project


CREATE TABLE IF NOT EXISTS `tbl_project` (

  `id` INTEGER NOT NULL auto_increment,

  `name` varchar(128) NOT NULL,

  `description` text NOT NULL,

  `create_time` DATETIME default NULL,

  `create_user_id` INTEGER default NULL,

  `update_time` DATETIME default NULL,

  `update_user_id` INTEGER default NULL,

  PRIMARY KEY  (`id`)

) ENGINE = InnoDB

;


-- DROP TABLE IF EXISTS `tbl_issue` ;


CREATE TABLE IF NOT EXISTS `tbl_issue` 

( 

  `id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,

  `name` varchar(256) NOT NULL,

  `description` varchar(2000), 

  `project_id` INTEGER,

  `type_id` INTEGER,

  `status_id` INTEGER,

  `owner_id` INTEGER,

  `requester_id` INTEGER,

  `create_time` DATETIME,

  `create_user_id` INTEGER,

  `update_time` DATETIME,

  `update_user_id` INTEGER  

) ENGINE = InnoDB

; 


-- DROP TABLE IF EXISTS `tbl_user` ;


-- Table User


CREATE TABLE IF NOT EXISTS `tbl_user` 

(

  `id` INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,

  `email` Varchar(256) NOT NULL,

  `username` Varchar(256),

  `password` Varchar(256),

  `last_login_time` Datetime,

  `create_time` DATETIME,

  `create_user_id` INTEGER,

  `update_time` DATETIME,

  `update_user_id` INTEGER

) ENGINE = InnoDB

; 


-- DROP TABLE IF EXISTS `tbl_project_user_assignment` ;


-- Table User


CREATE TABLE IF NOT EXISTS `tbl_project_user_assignment`

(

  `project_id` Int(11) NOT NULL,

  `user_id` Int(11) NOT NULL,

  `create_time` DATETIME,

  `create_user_id` INTEGER,

  `update_time` DATETIME,

  `update_user_id` INTEGER,

 PRIMARY KEY (`project_id`,`user_id`)

) ENGINE = InnoDB

;




-- The Relationships 

ALTER TABLE `tbl_issue` ADD CONSTRAINT `FK_issue_project` FOREIGN KEY (`project_id`) REFERENCES `tbl_project` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;


ALTER TABLE `tbl_issue` ADD CONSTRAINT `FK_issue_owner` FOREIGN KEY (`owner_id`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT; 


ALTER TABLE `tbl_issue` ADD CONSTRAINT `FK_issue_requester` FOREIGN KEY (`requester_id`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT; 


ALTER TABLE `tbl_project_user_assignment` ADD CONSTRAINT `FK_project_user` FOREIGN KEY (`project_id`) REFERENCES `tbl_project` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;


ALTER TABLE `tbl_project_user_assignment` ADD CONSTRAINT `FK_user_project` FOREIGN KEY (`user_id`) REFERENCES `tbl_user` (`id`) ON DELETE CASCADE ON UPDATE RESTRICT;   


-- Insert some seed data so we can just begin using the database

INSERT INTO `tbl_user` 

  (`email`, `username`, `password`) 

VALUES 

  ('test1@notanaddress.com','Test_User_One', MD5('test1')),

  ('test2@notanaddress.com','Test_User_Two', MD5('test2'))    

;


-- Enable foreign keys

SET FOREIGN_KEY_CHECKS = 1 ;



Wenn ich aber eine neue Issue einem bestehenden Projekt zuweise, dann erhalte ich folgende Fehlermeldung




CDbException

Description


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 (`trackstar`.`tbl_issue`, CONSTRAINT `FK_issue_project` FOREIGN KEY (`project_id`) REFERENCES `tbl_project` (`id`) ON DELETE CASCADE)



Das Buch war bis jetzt sehr interessant, aber wird für mich grad zum grauen!

Hat jemand eine Lösung?

Den Dump von den Programmen kriegt man bei packetpub

https://www.packtpub.com/code_download/5280

Kannst du manuell Issues anlegen die einem bestehendem Projekt zugeordnet sein sollen? Einfach mal mit phpMyAdmin oder einem ähnlichen Tool ausprobieren um sicher zu stellen, dass die constraints passen.

Ansonsten wäre es denke ich hilfreich einmal das debug log für die DB-Queries anzuschalten (siehe http://www.yiiframework.com/doc/guide/database.ar der Tip direkt über "Reading Record"). Bin mir nur nicht sicher ob die Log-Ausgabe ankommt, wenn vorher eine Exception auftritt. Eventuell musst du die catchen, so dass der request sauber zu Ende bearbeitet werden kann.