[Dbix-class] Empty inserts with add_to_... and create

apv apv at sedition.com
Thu Jan 12 22:30:16 CET 2006


The only thing I can guess is wrong is that the table is 
self-referential?

A chapter might have a parent chapter and so on. I've never done 
constraints
in DBs before but I've had the same concept work in Class::DBI.

Here's the table definition:

CREATE TABLE `chapter` (
   `id` int(8) unsigned NOT NULL auto_increment,
   `doc` int(8) unsigned NOT NULL default '0',
   `chapter` int(8) unsigned default NULL,
   `number` int(4) default NULL,
   `title` tinytext,
   `subtitle` tinytext,
   `created` datetime default NULL,
   `updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update 
CURRENT_TIMESTAMP,
   PRIMARY KEY  (`id`),
   KEY `chapter` (`chapter`),
   KEY `doc` (`doc`),
   CONSTRAINT `chapter_ibfk_1` FOREIGN KEY (`chapter`) REFERENCES 
`chapter` (`id`),
   CONSTRAINT `chapter_ibfk_2` FOREIGN KEY (`doc`) REFERENCES `doc` 
(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

And a sample that's failing (I checked and all the variables are 
defined correctly).

Pangyre::Model::chapter->create({
                 title => $chapter,
                 doc => $doc->id,
                 subtitle => $chapter_subtitle,
                 number => $chapter_num,
                 });

With the excerpted class def:

__PACKAGE__->add_columns( qw( id doc chapter number title subtitle
                               created updated ));

__PACKAGE__->set_primary_key('id');
__PACKAGE__->has_one('doc' => 'Pangyre::Model::doc');
__PACKAGE__->might_have('parent' => 'Pangyre::Model::chapter', 
'chapter');
__PACKAGE__->has_many('chapters' => 'Pangyre::Model::chapter', 
'chapter');
__PACKAGE__->has_many('pages' => 'Pangyre::Model::page', 'chapter');


The related classes are working fine for normal searches and such.


On Thursday, January 12, 2006, at 01:17  PM, Matt S Trout wrote:

> On Thu, Jan 12, 2006 at 12:01:37AM -0800, apv wrote:
>> I'm getting a weird error when trying to create() or add_to_...(). 
>> I've
>> checked my args and such, sorry no code right now, but the underlying
>> stuff seems sound and is working in relational find() or manual 
>> INSERTs
>> with the identical args. It seems like the args are not even getting
>> passed through to create(). new() works but insert() or create() or
>> add_to...() die with this message:
>>
>> DBD::mysql::st execute failed: Cannot add or update a child row: a
>> foreign key constraint fails [for Statement "INSERT INTO chapter ()
>> VALUES ()"] at
>> /usr/local/lib/perl5/site_perl/5.8.2/DBIx/Class/Storage/DBI.pm line 
>> 187.
>>
>> Does this ring a bell with anyone?
>
> Is there any chance of you posting some of the code so we can see 
> what's
> going on? Also, what DBIx::Class version are you using?
>
> -- 
>      Matt S Trout       Offering custom development, consultancy and 
> support
>   Technical Director    contracts for Catalyst, DBIx::Class and BAST. 
> Contact
> Shadowcat Systems Ltd.  mst (at) shadowcatsystems.co.uk for more 
> information
>
>  + Help us build a better perl ORM: 
> http://dbix-class.shadowcatsystems.co.uk/ +
>
> _______________________________________________
> List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
> Wiki: http://dbix-class.shadowcatsystems.co.uk/
> IRC: irc.perl.org#dbix-class
> SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
>
>




More information about the Dbix-class mailing list