2017-06-19 4 views
3

Disons que j'ai deux entités Doctrine, Person et Company. Les deux ont un champ address qui accepte un objet de valeur d'adresse. Selon les règles métier, Company::Address est requis tandis que Person::Address peut être nul.Déclare Doctrine intégrable comme NULL ou non

Doctrine 2.5 propose the Embeddable type, qui a apparemment été construit avec des objets de valeur à l'esprit et, en effet, je le vois comme une solution parfaite pour mon cas.

Cependant, il y a une chose que je ne peux pas faire: déclarer que Person::Address est nullable alors que Company::Address ne l'est pas. Un attribut booléen nullable existe pour les champs d'Embedded eux-mêmes, mais bien sûr cela s'applique à chaque entité dans laquelle l'adresse est incorporée.

Est-ce que quelqu'un sait si quelque chose me manque ou si cela est dû à une limitation technique, si il y a une solution de contournement, etc.? À l'heure actuelle, la seule solution que je vois est de déclarer tous les champs Embeddable comme nullable: true et gérer la contrainte dans mon code.

Répondre

3

Quelqu'un sait-il si je manque quelque chose

ne sont pas intégrables nullables pris en charge dans Doctrine 2. Ils devraient le rendre à la version 3.

s'il y a une solution de contournement

La solution « est de ne pas utiliser intégrables là, et [...] remplacer des champs avec intégrables [m anually] » (@Ocramius)

Exemple:

class Product 
{ 
    private $sale_price_amount; 
    private $sale_price_currency; 

    public function getSalePrice(): SalePrice 
    { 
     if (is_null($this->sale_price_currency) 
      || is_null($this->sale_price_amount) 
     ) { 
      return null; 
     } 

     return new SalePrice(
      $this->sale_price_currency, 
      $this->sale_price_amount 
     ); 
    } 
} 

(extraits par Harrison Brown)