[Dbix-class] Creating rows

Jess Robinson castaway at desert-island.me.uk
Sat Jan 5 18:05:28 GMT 2008



On Sat, 5 Jan 2008, Zbigniew Lukasiak wrote:

> Happy New Year!
>
> I've recently learned that in DBIC you can do something like:
>
> $user_rs->create( { name => 'new nick', addresses => [
>            { address => 'new address' },
>            { address => 'new address 2' },
>            ]
>      }
> );

Funky ain't it, I did that ;)

> When refactoring the FormFu::Model::DBIC code I've reached a point
> where it would be useful to do:
> $user->update_with_relations( { name => 'new nick', addresses => [
>            { id => 2, address => 'new home' },
>            { id => 3, address => 'new office'},
>            { id => undef, address => 'new address'},
>            ]
>        }
>    );
> and have the (already existing) related rows updated.  Unfortunately
> when I do that DBIC tries to insert them and fails because their ids
> are already taken (the last one, with id => undef, works as expected -
> a new row is inserted).

Not yet, but it's a logical follow on, may be somewhat more interesting to 
do though.. OTOH nothingmuch has just helped by factoring out a part of 
the code.

new() currently does a find_or_new on all the related bits, then insert() 
inserts them if needed.

update() should likely do similar, plus inserting if new relateds are 
added. I'm surprised the undef got inserted..


Jess



More information about the DBIx-Class mailing list