[Wt 3.3.3] hasOne relationship from one object toward itself
Added by Thomas Saquet over 10 years ago
Hello,
I try to make a relationship from one object toward itself.
I think I may have a problem with the usage of weak_ptr. The relationship created seems inverted.
I declare the relationship like this:
Wt::Dbo::weak_ptr<MyClass> myClass;
Wt::Dbo::ptr<MyClass> myClassBelongTo;
template<class Action>
void persist(Action& a)
{
Wt::Dbo::belongsTo(a, myClassBelongTo, TRIGRAM_MY_CLASS SEP "NXT_ID");
Wt::Dbo::hasOne(a, myClass, TRIGRAM_MY_CLASS SEP "NXT_ID");
}
I have two objects MyClass : myClass1 and myClass2.
If I do "myClass1.modify()->myClass = myClass2;" then the myClass2 line in the database has a reference to myClass1.
What I expected was the opposite. What do you think about that ? Am I wrong ?
Thank you,
Regards,
Thomas
P.S. : I understand that I have to use myClassBelongTo to have the expected relationship, but it does not really make sense, does it ?
Replies (2)
RE: [Wt 3.3.3] hasOne relationship from one object toward itself - Added by Koen Deforche over 10 years ago
Hey,
The 'belongsTo()' and 'hasOne()' names indeed are not always intuitive. From a database perspective, there's no difference between Many-to-One (hasMany()/belongsTo()) and One-to-One (hasOne()/belongsTo()) and we chose to keep the same database organization as a consequence. In Many-to-One it's the belongsTo() side that has the actual pointer value and hasMany() is mapped by a query. And that's why hasOne() is the query and belongsTo() is the pointer, in a One-to-One relation.
We often have a discussion here as well on the names (which I took from Ruby-on-Rails ;-) ).
Regards,
koen
RE: [Wt 3.3.3] hasOne relationship from one object toward itself - Added by Thomas Saquet over 10 years ago
Hello Koen,
Thank you for this answer, I understand why you made that choice :) I guess it can be an endless source of discussion as there is no really perfect solution.
Yes, I noticed it was the same than RoR (which I discovered recently), I thought it was kind of conventional, I think that is well inspired ;)
Regards,
Thomas