[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