[Dbix-class] convention for naming primary keys to avoid ambiguousselects

Octavian Rasnita orasnita at gmail.com
Tue Nov 25 16:31:01 GMT 2008


From: "David Schmidt" <davewood at gmx.at>
> Hello List,
>
> I used to have an "id INTEGER PRIMARY KEY" column in every table.
> Now I am using DBIC and repeatedly run into this kind of error.
>
> SELECT me.id, me.title, me.artist FROM cds me WHERE ( me.artist = ? ): '2'
> SELECT me.id, me.title, me.artist, artist.id, artist.name FROM cds me
> JOIN artists artist ON ( artist.id = me.artist ) WHERE ( id = ? ): '1'
> DBI Exception: DBD::SQLite::db prepare_cached failed: ambiguous column
> name: id(1) at dbdimp.c line 271 [for Statement "SELECT me.id,
> me.title, me.artist, artist.id, artist.name FROM cds me  JOIN artists
> artist ON ( artist.id = me.artist ) WHERE ( id = ? )"] at
> /usr/local/share/perl/5.8.8/DBIx/Class/Schema.pm line 954
>
> is it best(-DBIC)-practice to name primary keys <tablename>_id to
> avoid these errors or is there some other solution?
>
> thanks in advance
>
> David

It is better to use table_name.id in the DBIC code that wants to access the 
column id of that table, of course, only in case you need to use 2 or more 
tables in the query.

$c->model('DB::TableName')->search({
  'the_table.id' => 1,
}
...

Octavian





More information about the DBIx-Class mailing list