1

Doctrine2を使用します。

'size'というエンティティがあり、データベースからこれらのエンティティをプルするために(QueryBuilderを使用して)DQLを形成しようとしています。

「サイズ」は予約語のようです http://www.doctrine-project.org/docs/orm/2.0/en/reference/dql-doctrine-query-language.html#id3

エンティティ名をエスケープする方法が見つかりません(バッククォートと二重引用符を試しました)

$dql = "SELECT product p join p.size size";

上記を実行すると、次のようになります。

Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message '[Syntax Error] line 0, col 53: Error: Expected IdentificationVariable | StateFieldPathExpression | AggregateExpression | "(" Subselect ")" | ScalarExpression, got 'size'' 

マニュアルが予約語のエスケープについて説明しているように見えます-それは列とテーブルの名前を参照しています。誰かがこれに光を当てることができますか?予約された(DQLの)単語をエンティティ名として使用することは不可能ですか?

ありがとう

4

1 に答える 1

1

エイリアスを使用して、この問題を克服することができました。

$dql = "SELECT p, sizealias FROM Product p JOIN p.size sizealias";

私はストレートDQLを使用していませんが、代わりにqueryBuilderを使用すると、上記のソリューションもそこで機能します。

$qb->select('p, sizealias')
   ->from('Product', 'p')
   ->join('p.size', 'sizealias');
于 2011-05-19T09:58:59.410 に答える