in reply to Re: Re: field names and Class::DBI
in thread field names and Class::DBI

No... don't forget that has_many() and has_a() are actually method calls, not declarations... so they are executed in the order that they are in the source code. The has_many() call comes first, and at that time, the has_a() call hasn't happened yet.

If you were to reorder your source code so that the has_a() call comes first, then it would indeed have to work.

So, what happens now? Class::DBI makes a bad guess, it uses the "moniker" of the class name that has the has_many() call, for the field name for the remote table. In your case, that is "usr", derived from the class name "Dl::Usr".