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.

Reply via email to