About the second part of your question:
http://www.doctrine-project.org/api/orm/2.4/class-Doctrine.ORM.Query.ResultSetMapping.html#_addFieldResult
says that the 2nd parameter of addFieldResult( ) = $columnName = The name
of the column in the SQL result set
and the 3rd parameter = $fieldName = The name of the field on the declaring
class.
So: the *word_id* in "$rsm->addFieldResult('t', 'translation_id',
'word_id');" is the *field name* of the Words-entity, *not the column name*of
the words-table.
Is that the case or did you happen to name that field something like
*$wordId*?
Still puzzling about the first part of your question with the
ResultSetMappingBuilder.
On Friday, 28 February 2014 23:57:06 UTC+1, martijn korse wrote:
>
> I'm trying to create a native query (the reason for this is that i need
> ORDER BY RAND()) in which i join a table (words) on itself
>
> This is my query:
>
> SELECT
> w.word_id, w.word,
> wt.wordtype_id AS wordtypeid, wt.wordtype,
> t.word_id AS translation_id, t.word AS translation
> FROM words AS w
> LEFT JOIN wordtypes wt ON (wt.wordtype_id=w.wordtype_id)
> LEFT JOIN word_translations wtr ON (wtr.originalword_id=w.word_id)
> LEFT JOIN words t ON (t.word_id=wtr.translationword_id)
> ORDER BY RAND() LIMIT 1
>
> What it does: it select a random word and also what type of word it is
> (verb, noun, etc,) and it's translation. Since the translation is a word
> itself i'm using the same table again aliased as 't'
>
> When i try to map the results though, i'm bumping into problems:
>
> $rsm = new ResultSetMappingBuilder($this->_em);
> $rsm->addRootEntityFromClassMetadata('Application\Entity\Words', 'w');
> $rsm->addJoinedEntityFromClassMetadata('Application\Entity\Wordtypes',
> 'wt', 'w', 'wordtype', array("wordtype_id"=>"wordtypeid"));
> $rsm->addJoinedEntityFromClassMetadata('Application\Entity\WordTranslations'
> , 'wtr', 'w', 'translationOriginals');
> $rsm->addJoinedEntityFromClassMetadata('Application\Entity\Words', 't',
> 'wtr', 'translationword', array("word_id"=>"translation_id",
> "word"=>"translation"));
>
> According to the docs (
> http://docs.doctrine-project.org/en/2.1/reference/native-sql.html#resultsetmappingbuilder)
>
> the last parameter of addJoinedEntityFromClassMetadata() can be used to
> avoid name name-clashes, This seems to be working for the wordtype table,
> but not for the aliased Words entity -> even though i tell doctrine that
> word_id should be translation_id, it still gives me the error *"The
> column 'word_id' conflicts with another column in the mapper."*
>
> Am i doing something wrong, or is this simply not possible (or even a bug)?
> If it's not possible/a bug : what would be a work-around?
> I've tried manually mapping the fields like this:
>
> $rsm = new ResultSetMapping;
> $rsm->addEntityResult('Application\Entity\Words', 'w');
> $rsm->addFieldResult('w', 'word_id', 'wordId');
> $rsm->addFieldResult('w', 'word', 'word');
> $rsm->addJoinedEntityResult('Application\Entity\Wordtypes' , 'wt', 'w',
> 'wordtype');
> $rsm->addJoinedEntityResult('Application\Entity\WordTranslations' , 'wtr',
> 'w', 'translationOriginals');
> $rsm->addJoinedEntityResult('Application\Entity\Words' , 't', 'wtr',
> 'translationword');
>
> This works, but only gives me a Word entity and i also want the
> translation. But as soon as i add this:
>
> $rsm->addFieldResult('t', 'translation_id', 'word_id');
>
> I get the error: Notice: Undefined index: word_id in
> C:\wamp\www\fathertongue\vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\AbstractHydrator.php
>
> on line *250*
>
> I even tried reversing the columns:
> $rsm->addFieldResult('t', 'word_id', 'translation_id');
>
> But that didnt work either: Notice: Undefined index: translation_id in
> C:\wamp\www\fathertongue\vendor\doctrine\orm\lib\Doctrine\ORM\Internal\Hydration\AbstractHydrator.php
>
> on line *250*
>
> Btw: before i get into a discussion about the usage of ORDER BY RAND() :
> ultimately the query will be much more complex with lots of filters (where
> clauses) that should be taken into account while selecting a random row.
> This makes it impossible to use a trick like selecting a random primary key
> first to speed up performance. Also, i will be selecting much more data
> then the few columns i have now.
>
--
You received this message because you are subscribed to the Google Groups
"doctrine-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/doctrine-user.
For more options, visit https://groups.google.com/groups/opt_out.