Hi Oleg!
You are right, there is no problem because you defined the intermediate tables.
The issue comes from this:
> a.addB1(b1)
> a.addB2(b2)
what if it makes more sense to have
a1 = A ()
a2 = A ()
a3 = A ()
b1 = B ()
a1.add (b1)
b1.add (a2)
b1.add (a3)
Notice that the relationship is not symmetric.
Am I making any sense? Or should I try to get some sleep? :)
Regards,
Miguel Tavares
2009/8/12 Oleg Broytmann <phd@...>:
> On Wed, Aug 12, 2009 at 11:58:38AM +0100, Miguel Tavares wrote:
>> Running your example this is the schema on the database:
>> CREATE TABLE a (
>> id INTEGER PRIMARY KEY
>> );
>> CREATE TABLE a1_b1 (
>> a_id INT NOT NULL,
>> b_id INT NOT NULL
>> );
>> CREATE TABLE a2_b2 (
>> a_id INT NOT NULL,
>> b_id INT NOT NULL
>> );
>> CREATE TABLE b (
>> id INTEGER PRIMARY KEY
>> );
>
> I don't see any problem with the schema.
>
> class A (SQLObject):
> B1 = RelatedJoin ('B', addRemoveName='B1', intermediateTable='a1_b1')
> B2 = RelatedJoin ('B', addRemoveName='B2', intermediateTable='a2_b2')
>
> class B (SQLObject):
> A1 = RelatedJoin ('A', addRemoveName='A1', intermediateTable='a1_b1')
> A2 = RelatedJoin ('A', addRemoveName='A2', intermediateTable='a2_b1')
>
> A.createTable()
> B.createTable()
>
> a = A()
> b1 = B()
> b2 = B()
> a.addB1(b1)
> a.addB2(b2)
> print a.B1
> print a.B2
>
> 1/QueryR : CREATE TABLE a (
> id INTEGER PRIMARY KEY
> )
> 2/QueryR : CREATE TABLE a1_b1 (
> a_id INT NOT NULL,
> b_id INT NOT NULL
> )
> 3/QueryR : CREATE TABLE a2_b2 (
> a_id INT NOT NULL,
> b_id INT NOT NULL
> )
> 4/QueryR : CREATE TABLE b (
> id INTEGER PRIMARY KEY
> )
> 5/QueryR : INSERT INTO a VALUES (NULL)
> 6/QueryR : SELECT NULL FROM a WHERE ((a.id) = (1))
> 7/QueryR : INSERT INTO b VALUES (NULL)
> 8/QueryR : SELECT NULL FROM b WHERE ((b.id) = (1))
> 9/QueryR : INSERT INTO b VALUES (NULL)
> 10/QueryR : SELECT NULL FROM b WHERE ((b.id) = (2))
> 11/QueryR : INSERT INTO a1_b1 (a_id, b_id) VALUES (1, 1)
> 12/QueryR : INSERT INTO a2_b2 (a_id, b_id) VALUES (1, 2)
> 13/QueryR : SELECT b_id FROM a1_b1 WHERE a_id = (1)
> [<B 1 >]
> 14/QueryR : SELECT b_id FROM a2_b2 WHERE a_id = (1)
> [<B 2 >]
>
> Ok?
>
> Oleg.
> --
> Oleg Broytmann http://phd.pp.ru/ phd@...
> Programmers don't die, they just GOSUB without RETURN.
>
> ------------------------------------------------------------------------------
> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
> trial. Simplify your report design, integration and deployment - and focus on
> what you do best, core application coding. Discover what's new with
> Crystal Reports now. http://p.sf.net/sfu/bobj-july
> _______________________________________________
> sqlobject-discuss mailing list
> sqlobject-discuss@...
> https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss
>
|