4

私はDoctrine2(Beta3)サンドボックスを使用して作業しており、プライベートクラスのメンバーに先頭のアンダースコアを配置するというZendFrameworkコーディング規約を適用しようとしています。アドレスを照会すると、そのプライベートメンバーには下線が引かれていませんが、期待どおりにオブジェクトを取得します。下線を追加し、データベースを再生成して再入力してから、同じクエリを実行すると、次のエラーメッセージが表示されます。

PHPの通知:未定義のインデックス:id in ... Doctrine / ORM / Internal / Hydration / AbstractHydrator.php on line 184

PHPの致命的なエラー:キャッチされない例外「Doctrine \ DBAL\DBALException」とメッセージ「不明な列タイプが要求されました。」で...Doctrine/ DBAL / DBALException.php:81

DQLクエリ:

$q = $em->createQuery('select u from Entities\Address u where u.id = ?1');
$q->setParameter(1, '1');
$address = $q->getSingleResult();

ZFedアドレスクラス:

<?php

namespace Entities;

/** @Entity @Table(name="addresses") */
class Address
{
    /**
     * @Id @Column(type="integer", length=11, name="id")
     * @GeneratedValue(strategy="AUTO")
     */
    private $_id;
    
    /** @Column(type="string", length=255, name="street") */
    private $_street;

    public function getId()
    {
        return $this->_id;
    }

    public function getStreet()
    {
        return $this->_street;
    }

    public function setStreet($street)
    {
        $this->_street = $street;
    }

}
4

1 に答える 1

3

はい、すべてのDQLクエリの前に_を書き込む必要があります。

変数の前にあるアンダースコアは、ある種のハンガリアン記法ですが、Doctrineチームはこれを好みません。Zend Frameworkでさえ、私が理解している限り、新しいコードのためにそのスタイルを削除します。他の多くのプロジェクトも同じことを行い、PEAR2はこの点で標準を変更しました。

于 2010-09-01T05:43:34.760 に答える