in reply to DBIx, using belongs_to on optional field, insert-by-side-effect in foreign table

First, to clarify, I am answering this based upon DBIx::Class and the belongs_to method contained in the DBIx::Class::Relationship submodule.

Regarding null foreign keys, the documentation says:

If the relationship is optional -- i.e. the column containing the foreign key can be NULL -- then the belongs_to relationship does the right thing. Thus, in the example above $obj->author would return undef. However in this case you would probably want to set the join_type attribute so that a LEFT JOIN is done, which makes complex resultsets involving join or prefetch operations work correctly.
If I am reading your question correctly, it sounds like this is your difficulty. The solution can be implemented (based on the module documentation):

My::DBIC::Schema::Car->belongs_to(radio => 'My::DBIC::Schema::Radio', 'radio', {join_type => 'left'});

If this doesn't help, post your calling code and we can see if the issue lies there.

  • Comment on Re: DBIx, using belongs_to on optional field, insert-by-side-effect in foreign table
  • Download Code

Replies are listed 'Best First'.
Re^2: DBIx, using belongs_to on optional field, insert-by-side-effect in foreign table
by smallvaluesof2 (Novice) on Jan 19, 2009 at 16:06 UTC

    Yes, adding a join_type clause fixed the problem.

    I had seen the documentation you referred to I but had misinterpreted it to mean that NULL optional foreign key fields would just work out of the box and that the left join clauses might be needed in the context of obtaining rows of cars rather than also to moderate side-effects (not knocking what is going on behind the scenes - it's great, just that I don't understand it all).

    Thank you