DQLでクエリを書くのはちょっと混乱します。DQL(Doctrine 2)の名前空間でバックスラッシュをエスケープする
$query = $em->createQuery('SELECT u FROM MyProject\Model\User u WHERE u.age > 20');
名前空間のバックスラッシュはエスケープされていない理由:公式ドキュメントから ?
その理由からZend Studioで警告が出ていますが、とにかく動作しますが、\ Mも\ Uも有効なエスケープシーケンスではないので、 "運が良かった"と思います。
あなたはどう思いますか?その構文を使用するのは安全ですか? DQLの "\"を常にエスケープする方が良いでしょうか?
$query = $em->createQuery('SELECT u FROM MyProject\\Model\\User u WHERE u.age > 20');
Btw、私は自分のプロジェクトでいくつかの作業コードをチェックしました...単一のバックスラッシュは二重引用符で囲まれた文字列の中でも機能します。これをクラッシュさせる唯一の方法は、\で囲まれたエスケープシーケンスを構成する文字の前に二重引用符で囲まれた文字列を使用することです。 – J0HN
はい、Doctrineのドキュメントは本当に間違っています。つまり、例の名前は大文字であるため(つまり、エスケープシーケンスは作成できません)、その例はうまくいきますが、ベストプラクティスはバックスラッシュをエスケープすることですリンクJOHN! – Enrique