2016-07-29 9 views
0

データベース列に対応していないのがfirstNameandlastNameブタは私のデータベースに私はfirst_nameandlast_nameとしてそれらを格納言う性質を-てみましょう。 UserForm内部ZF2プロパティの名前は、私はいくつか含まれてい<code>User</code><code>model</code>持っ

私はそうのようにハイドレーターを使用します。

$this->setHydrator(new ClassMethods(true)); 

デバッグを示しています

array(5) { 
    ["firstName"] => string(13) "my first name" 
    ["lastName"] => string(12) "my last name" 
    ... 
} 

はなぜ配列のキーでも、私が$this->setHydrator(new ClassMethods(true));を使用して、データベースの列が一致しないのですか?

+0

getterとsetterの定義方法については言及していませんが、getFirstNameとsetFirstNameがあると推測します。これは、ClassMethodsハイドレーターが使用するものです。 – dualmon

答えて

0

私はハイドレーターに命名戦略を設定することにより、Userモデルに私のデータベース列をマッピングするための問題を解決し、ここに私のコードは次のとおりです。教義で

$hydrator = new ClassMethods(false); 
$namingStrategy = new \Zend\Hydrator\NamingStrategy\UnderscoreNamingStrategy();  
$hydrator->setNamingStrategy($namingStrategy); 
0

あなたのデータベースモデルの意味とは別のオブジェクトモデルと連携その列名とプロパティ名は必ずしも同じではありません。エンティティ定義では、カラム名を明示的に宣言できます。Doctrineは、データベースへの変更を永続させるときに、プロパティ名がUnitOfWorkの正しいカラム名にマッピングされるようにします。

次のようにあなたのエンティティ定義で@Column注釈に列名を宣言します。

/** @Column(type="string", name="first_name") */ 
private $firstName; 

/** @Column(type="string", name="last_name") */ 
private $lastName; 

あなたはこのin the doctrine documentation chapter 4.3. Property mappingの詳細を読むことができます。

このように、データベースモデルとは独立したオブジェクトモデルを作成できます。したがって、デバッグでは、データベースの列名ではなくオブジェクトモデルのプロパティが表示されます。私はこの説明が違いを理解するのに役立つことを願っています。

関連する問題

 関連する問題