Hello,

I'm curious about why object inflation isn't working with might_have or 
has_one, but it does with belongs_to. Any ideas? Maybe I need another join 
(adding this comment at the end)?
After solving it with a hack (use get_column and then model->find using that 
id), I discovered that not using belongs_to would cause inflation to stop 
working.

in CatMgrDB/Listing.pm:
__PACKAGE__->might_have( coupon   => CatMgrDB::Coupon);
(works if changed to belongs_to, which works with the other relations)

in CatMgrDB/Coupon.pm:
__PACKAGE__->belongs_to( listing  => 'CatMgrDB::Listing', 'listing', {join_type 
=> 'left'});

in Controller/Admin.pm:
my $listing = $c->model('CatMgrDB::Listing')->find($listingid);
my $coupon = $listing->coupon; # this is undef for might_have but works for 
belongs_to

I think my own troubles with this case and also the to me startling 
autovivification a week ago are a documentation problem, which I'm willing to 
contribute to fixing. I solved the autoviv. then by making relations all 
belongs_to or has_many, and adding a dummy record id 0 for each table (instead 
of allowing nulls) since I was worried about what my client might do to it 
afterwards.

So the docs should explain autovivification as the system "doing the right 
thing", which I suppose is a basic of ORMic programming, and also another basic 
that relations are only unidirectional. The English language of the method 
names was confusing because of similarities and also because one might think a 
single belongs_to line would naturally create an accessor in the other object. 
And my use of might_have in Listing was chosen as an inverse of the belongs_to 
in Coupon. (Certainly a coupon does not own a listing in my scheme but perhaps 
they should belong_to each other if they store each other's id?)

Personally I am most concerned about what may be considered "side effects", 
such as autovivification, inflation failing, cascading updates or deletes being 
enabled or not by default, etc. So that I have to test very carefully to see 
exactly what behavior is being generated.

Anyway I am curious about why object lookup fails when I change from 
belongs_to. Since I have a dummy object I suppose I could just make might_have 
into belongs_to as well, but I didn't want to create a coupon by accident just 
in case "doing the right thing" caused autovivification, and avoided it and any 
business repercussions that might have.

Thanks and sorry for the lengthy post. Perhaps it is really 2 posts, the second 
being on documentation. Please don't take it the wrong way, I think this is a 
great project and it is very useful. But for someone not intimately familiar 
with the design philosophy behind it there are gotchas, and maybe some added 
docs would help in reducing traffic on this list. Just my 2 cents.

Sincerely,

Matt Rosin


 
____________________________________________________________________________________
Food fight? Enjoy some healthy debate 
in the Yahoo! Answers Food & Drink Q&A.
http://answers.yahoo.com/dir/?link=list&sid=396545367

_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/

Reply via email to