0

1 つのクエリで複数のテーブルを結合しようとしています。

私のエンティティ関係:

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

鬼ごっこ

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

これは、有効に機能する SQL ステートメントです。

SELECT DISTINCT person.lastname, person.firstname, address.mobileprivate, address.mobilebusiness FROM
    `address`,
    `person`,
    `persons_tags`,
    `sms_tags`
WHERE
    person.idaddress = address.idaddress
    AND person.idperson = persons_tags.person_idperson
    AND persons_tags.tag_idtag = sms_tags.tag_idtag
    AND sms_tags.sms_idsms = (myINPUT)

今、同じ結果を得るために、DQL で必要なエンティティを結合しようとしています。

SELECT DISTINCT s, t, p, a 
FROM Entities\Sms s 
JOIN s.sms_idsms t 
JOIN t.person_idperson p 
JOIN p.idaddress a 
WHERE s.idsms = (myINPUT)

しかし、私はエラーしか出ません:

PHP Fatal error:  Uncaught exception 'Doctrine\\ORM\\Query\\QueryException' with message '
SELECT DISTINCT s, t, p, a 
FROM Entities\\Sms s 
JOIN s.sms_idsms t 
JOIN t.person_idperson p 
JOIN p.idaddress a 
WHERE 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

作業中の SQL クエリのような DQL クエリを作成する方法は?

ネイティブ SQL クエリを回避しようとしています

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');

そしてエラーメッセージ

PHP Fatal error:  Uncaught exception 'Doctrine\\ORM\\Query\\QueryException' with message 'SELECT s, t, p, a FROM Entities\\Sms s LEFT JOIN s.tag t LEFT JOIN t.person p LEFT JOIN p.address a WHERE 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
4

1 に答える 1