2016-07-29 25 views
0

ich eine Usermodel haben, die einige enthält Eigenschaften-sagen wir mal firstNameandlastName -aber in meiner Datenbank Ich speichere sie als first_nameandlast_name.ZF2 Eigenschaften Name in Modell entspricht nicht Datenbankspalten

innerhalb UserForm Ich benutze einen Hydrator wie so:

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

Die Debug zeigt:

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

Warum die Array-Tasten, um die Datenbankspalten nicht übereinstimmen, verwende ich auch $this->setHydrator(new ClassMethods(true));?

+0

Sie erwähnen nicht, wie Ihre Getter und Setter definiert sind, aber ich wage eine Vermutung, dass Sie getFirstName und setFirstName haben. Dies ist, was der ClassMethods-Hydrator verwendet. – dualmon

Antwort

0

löste ich das Problem zu User Modell meiner Datenbankspalten zuordnen, indem Strategie auf dem Hydrator Namensgebung, hier ist mein Code:

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

In Lehren Sie mit einem Objektmodell aus Ihrer Datenbank Modell Bedeutung separaten arbeiten Diese Spaltennamen und Eigenschaftsnamen sind nicht unbedingt identisch. In Ihren Entitätsdefinitionen können Sie Ihre Spaltennamen explizit deklarieren, und dann stellt Doctrine sicher, dass die Eigenschaftsnamen den korrekten Spaltennamen in UnitOfWork zugeordnet sind, wenn Änderungen an der Datenbank persistent sind.

Sie Spaltennamen in den @Column Anmerkungen in die Entitäten wie folgt deklarieren:

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

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

Sie mehr zu diesem in the doctrine documentation chapter 4.3. Property mapping lesen kann.

So können Sie ein Objektmodell haben, das unabhängig von Ihrem Datenbankmodell ist. In Ihrem Debug sehen Sie also Ihre Objektmodelleigenschaften, nicht Ihre Datenbankspaltennamen. Ich hoffe, diese Erklärung hilft Ihnen, die Unterschiede zu verstehen.