Can you be a bit more specific? I didnt get which child_key are you talking
about (there's a plenty of them :))

2011/4/20 Jonathan Stott <[email protected]>

> I'm not sure if this fixes the problem or not, but:
>
> The :child_key is the child_key property, not the :child_key
> property's field name.
>
> Regards
> Jon
>
> On 20 April 2011 14:34, Israel Ben Guilherme Fonseca
> <[email protected]> wrote:
> > Hi everybody,
> >
> > I'm getting a problem with the many-to-many through relationship. I made
> the
> > "normal" version and the "through" version, and I thought that I would
> get
> > the same result, and thats not happening.
> >
> > Array.new Disciplina.all(Disciplina.professor_disciplinas.professor.id=> 1
> > )
> >
> > Array.new Disciplina.all(Disciplina.professores.id => 1 )
> >
> > These instructions should mean the same, and make the same (or almost)
> SQL.
> >
> > That's my code:
> >
> > #TABLES:
> > #
> > #disciplina
> >
> > #    id_disciplina,
> > #    nome
> >
> > #professor
> > #    id_professor
> > #
> > #professor_disciplina
> >
> > #    id_professor
> > #    id_disciplina
> >
> > class Disciplina
> >     include DataMapper::Resource
> >
> >     storage_names[:default] = "disciplina"
> >
> >     property :id,            Serial, :field => 'id_disciplina'
> >
> >     property :nome,          String
> >
> >     has n, :professor_disciplinas, 'ProfessorDisciplina', :child_key => [
> > :id_disciplina ]
> >
> >     has n, :professores, 'Professor', :through => :professor_disciplinas,
> > :via => :professor
> >
> > end
> >
> > class Professor
> >     include DataMapper::Resource
> >
> >     storage_names[:default] = "professor"
> >
> >     property :id,            Serial, :field => 'id_professor'
> >
> >
> >     has n, :professor_disciplinas, 'ProfessorDisciplina', :child_key => [
> > :id_professor ]
> >
> >     has n, :disciplinas, :through => :professor_disciplinas
> >
> > end
> >
> > class ProfessorDisciplina
> >         include DataMapper::Resource
> >
> >         storage_names[:default] = "professor_disciplina"
> >         belongs_to :professor ,  'Professor' , :child_key => [
> :id_professor
> > ], :key => true
> >
> >         belongs_to :disciplina,  'Disciplina', :child_key => [
> > :id_disciplina ], :key => true
> >
> > end
> >
> > # Nice SQL
> > Array.new Disciplina.all(Disciplina.professor_disciplinas.professor.id=> 1
> > )
> >
> >
> > # Bad SQL (database error and weird stuff)
> > Array.new Disciplina.all(Disciplina.professores.id => 1 )
> >
> >
> > The generated SQL for each instruction:
> >
> > -- Nice SQL
> > SELECT "disciplina"."id_disciplina", "disciplina"."nome"
> > FROM "disciplina"
> > INNER JOIN "professor_disciplina" ON "disciplina"."id_disciplina" =
> > "professor_disciplina"."id_disciplina"
> > INNER JOIN "professor" ON "professor_disciplina"."id_professor" =
> > "professor"."id_professor"
> > WHERE "professor"."id_professor" = 1
> > GROUP BY "disciplina"."id_disciplina", "disciplina"."nome" ORDER BY
> > "disciplina"."id_disciplina"
> >
> >
> > -- Bad SQL
> > SELECT "disciplina"."id_disciplina", "disciplina"."nome"
> > FROM "disciplina"
> > INNER JOIN "professor_disciplina" ON "disciplina"."id_professor" =
> > "professor_disciplina"."id_professor" -- should be
> disciplina.id_disciplina
> > INNER JOIN "professor_disciplina" "professor_disciplina_1" ON
> > "professor_disciplina"."id_disciplina" =
> > "professor_disciplina_1"."id_disciplina" -- why another join?
> > INNER JOIN "professor" ON "professor_disciplina_1"."id_professor" =
> > "professor"."id_professor"
> > WHERE "professor"."id_professor" = 1
> > GROUP BY "disciplina"."id_disciplina", "disciplina"."nome"
> > ORDER BY "disciplina"."id_disciplina"
> >
> > The bad SQL got a weird join and is using a wrong id.
> >
> > What am I doing wrong? I think that maybe it's something with the :via
> > option.
> >
> > Thanks in advance,
> >
> > ------------------------------------------------------
> > Syntax Highlighted version of the code:
> >
> > Ruby Code
> > http://dpaste.com/533933/
> >
> > Generated SQL
> > http://dpaste.com/533934/
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups
> > "DataMapper" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to
> > [email protected].
> > For more options, visit this group at
> > http://groups.google.com/group/datamapper?hl=en.
> >
>
> --
> You received this message because you are subscribed to the Google Groups
> "DataMapper" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/datamapper?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to