On 26/04/07, Jess Robinson <[EMAIL PROTECTED]> wrote:
On Tue, 24 Apr 2007, Eduard Giménez wrote:
> Hi,
>
> I'm working on a existing DB which has some data spanned across several
> tables. For example each user has an entry on the table "users" and on the
> "user_data" table. I know that it's not he best option, but It's how the DB
> is and I can change it :(
>
> Currently to add a new user I do (on Catalyst, btw):
>
> $u = $c->model('myDB::users')->create( { email => $email, active => 1,
> ...});
> $u->create_related('user_data', {field01 => $field1, field02 => $field02,
> ...});
>
> I would like to do something similar what is shown at [1]
>
> $c->model('myDB::users')->create( { email => $email,
> active => 1,
> ...
> user_data => {field01 =>
> $field1,
> field02 =>
> $field02,
> ...},
> } );
>
>> From that [2] Matt's message I undersant that this feature was going to be
> merged. Is that true? Has been already merged? On which DBIx::Class version?
>
> TIA,
>
> [1] http://www.mail-archive.com/[email protected]/msg02624.html:
> [2] http://www.mail-archive.com/[email protected]/msg02671.html
>
No, it hasn't.. it's lurking in the bulk_create branch, looking for more
tuits, and some nice people to write more scary tests to stress it.
What you've shown does work.. its find_or_create type stuff that doesnt
yet.
Here goes a patch to make find_or_create work:
Index: t/96multi_create.t
===================================================================
--- t/96multi_create.t (revision 3214)
+++ t/96multi_create.t (working copy)
@@ -7,7 +7,7 @@
my $schema = DBICTest->init_schema();
-plan tests => 6;
+plan tests => 7;
my $cd2 = $schema->resultset('CD')->create({ artist =>
{ name => 'Fred Bloggs' },
Index: lib/DBIx/Class/ResultSet.pm
===================================================================
--- lib/DBIx/Class/ResultSet.pm (revision 3214)
+++ lib/DBIx/Class/ResultSet.pm (working copy)
@@ -350,11 +350,17 @@
foreach my $key (keys %$input_query) {
if (ref($input_query->{$key})
&& ($info = $self->result_source->relationship_info($key))) {
- my $rel_q = $self->result_source->resolve_condition(
- $info->{cond}, delete $input_query->{$key}, $key
- );
- die "Can't handle OR join condition in find" if ref($rel_q) eq 'ARRAY';
- @related{keys %$rel_q} = values %$rel_q;
+ if (ref($input_query->{$key}) &&
!Scalar::Util::blessed($input_query->{$key})) {
+ # Abusing find
+ delete $input_query->{$key};
+ }
+ else {
+ my $rel_q = $self->result_source->resolve_condition(
+ $info->{cond}, delete $input_query->{$key}, $key
+ );
+ die "Can't handle OR join condition in find" if ref($rel_q)
eq 'ARRAY';
+ @related{keys %$rel_q} = values %$rel_q;
+ }
}
}
if (my @keys = keys %related) {
Cheers,
--
Jonas
_______________________________________________
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/
Searchable Archive: http://www.mail-archive.com/[email protected]/