database - Join multiple Tables including 2 join Tables -
i try join multiple tables in 1 query.
my entitie relations:
person
entities\person: type: entity table: person manytoone: address: targetentity: address joincolumn: name: idaddress referencedcolumnname: idaddress manytomany: tags: targetentity: tag jointable: name: persons_tags joincolumns: person_idperson: referencedcolumnname: idperson inversejoincolumns: tag_idtag: referencedcolumnname: idtag
tag
entities\tag: type: entity table: tag manytomany: sms: targetentity: sms mappedby: tag
sms
manytomany: tag: targetentity: tag jointable: name: sms_tags joincolumns: sms_idsms: referencedcolumnname: idsms inversejoincolumns: tag_idtag: referencedcolumnname: idtag
this valid working sql statement:
select distinct person.lastname, person.firstname, address.mobileprivate, address.mobilebusiness `address`, `person`, `persons_tags`, `sms_tags` person.idaddress = address.idaddress , person.idperson = persons_tags.person_idperson , persons_tags.tag_idtag = sms_tags.tag_idtag , sms_tags.sms_idsms = (myinput)
now try join needed entities in dql same result:
select distinct s, t, p, entities\sms s join s.sms_idsms t join t.person_idperson p join p.idaddress s.idsms = (myinput)
but error:
php fatal error: uncaught exception 'doctrine\\orm\\query\\queryexception' message ' select distinct s, t, p, entities\\sms s join s.sms_idsms t join t.person_idperson p join p.idaddress s.idsms = 2' in /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/queryexception.php:39 stack trace: #0 /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/parser.php(429): doctrine\\orm\\query\\queryexception::dqlerror('select distinct...') #1 /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/parser.php(925): doctrine\\orm\\query\\parser->semanticalerror('class entities\\...') #2 /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/parser.php(1561): doctrine\\orm\\query\\parser->joinassociationpathexpression() #3 /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/parser.php(1506): doctrine\\orm\\query\\parser->joinassociationdeclaration() #4 /var/www/ci_ in /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/queryexception.php on line 49
how write dql query working sql query?
i try avoid native sql query
here try query builder:
$qb->select(array('s', 't', 'p', 'a')) ->from('entities\sms', 's') ->leftjoin('s.tag', 't') ->leftjoin('t.person', 'p') ->leftjoin('p.address', 'a') ->where('s.idsms = 1');
and error message
php fatal error: uncaught exception 'doctrine\\orm\\query\\queryexception' message 'select s, t, p, entities\\sms s left join s.tag t left join t.person p left join p.address s.idsms = 1' in /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/queryexception.php:39\nstack trace:\n#0 /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/parser.php(429): doctrine\\orm\\query\\queryexception::dqlerror('select s, t, p,...')\n#1 /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/parser.php(925): doctrine\\orm\\query\\parser->semanticalerror('class entities\\...')\n#2 /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/parser.php(1561): doctrine\\orm\\query\\parser->joinassociationpathexpression()\n#3 /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/parser.php(1506): doctrine\\orm\\query\\parser->joinassociationdeclaration()\n#4 /var/www/ci_doc_rem/cod in /var/www/ci_doc_rem/codeigniter_doctrine/source/application/libraries/doctrine/orm/query/queryexception.php on line 49
the solution easy find.
i've replaced idname namingconvention 'id' every table / entitie , had closer picking owning , inverse side.
this enabled me write correct relations.
a big problem me, decode debug stack trace find error.
thanks spend time solve problem!
Comments
Post a Comment