[Dbix-class] Getting primary key (id) after populate

Dave Cross dave at dave.org.uk
Thu Sep 10 18:16:19 GMT 2015


On 10/09/15 19:04, Hetényi Csaba wrote:
> Dear friends
>
> Sorry for newbie question!
> I'd like to know, how to get the last inserted row's primary key after a
> populate?
> I have the following code in a Catalyst app (it inserts data to related
> tables too, but in the main table: FoldkHrsz only one row):
>
> # DB Populate
> my $hrsz_res = $c->model('DB::FoldkHrsz')->populate([
>          {
>          %$hrsz_data,
>          foldk_alreszlets => \@$alreszlet_AoH,
>       foldk_szeljegyzetts => \@$szeljegyzett_adat_AoH,
>       foldk_szolgalmis => \@$szolgalmi_adat_AoH,
>       foldk_tulajs => \@$tulaj_adat_AoH,
>       foldk_jogok_tenyeks => \@$jogok_tenyek_adat_AoH
>         },
>      ]);
>
> After this, if i try to get the last inserted row's PK with this:
>
> $hrsz_res->id;
>
> ..gives an error:
> "Can't call method "id" on unblessed reference at ..."
>
> I know, that the populate method's result is:
> \@result_objects (scalar context) | @result_objects (list context)
> but don't know, how to use them?

You're calling populate() in scalar context, so you're getting an array 
reference back. You want the first element in the referenced array.

   $hrsz->[0]->id;

But a better solution might be to call populate() in list context.

   my ($hrsz_res) = $c->model('DB::FoldkHrsz')->populate([ ... ]);

Then $hrsz_res will contain a row object which you can use in the way 
you were originally expecting.

   $hrsz->id;

hth,

Dave...




More information about the DBIx-Class mailing list