2010-12-26 10 views
1

私はMongoDBでDoctrine ODMを使用しています。私はこのような "製品モデル" を持っている:Doctrine/MongoDB:数値配列の代わりにキーと値のペアを使用

namespace Cms\Model; 

/** @EmbeddedDocument */ 
class ProductParam 
{ 
    /** @String */ 
    private $type; 

    /** @String */ 
    private $value; 
} 

私はこのスキーマで文書を挿入すると、結果がこれです::

{ 
    "_id": ObjectId("4d17ac603ffcf6d01300002a"), 
    "title": "Peugeot 206 2001-X-Reg, 1.4lx Air-con, 12 months mot, Credit Cards Accepted.", 
    "description": "PEUGEOT 206 1.4LX IMMACULATE THROUGHOUT DRIVES ABSOLUTELY SUPERB", 
    "params": { 
    "0": { 
     "type": "carBrand", 
     "value": "PEUGEOT" 
    }, 
    "1": { 
     "type": "carModel", 
     "value": "206 LX" 
    } 
} 

namespace Cms\Model; 

/** @Document(collection="products") */ 
class Product 
{ 
    /** @Id */ 
    private $id; 

    /** @String */ 
    private $title; 

    /** @String */ 
    private $description; 

    /** @Date */ 
    private $createdAt; 

    /** @EmbedMany(targetDocument="Cms\Model\ProductParam") */ 
    private $params; 

    /** @EmbedOne(targetDocument="Cms\Model\Coordinate") */ 
    private $coordinate; 

    public function __construct() 
    { 
     $this->details = new \Doctrine\Common\Collections\ArrayCollection(); 
     $this->params = new \Doctrine\Common\Collections\ArrayCollection(); 
    } 
} 

マイProductParamモデルは、このようなものです

しかし、私はこれのようなものです:

{ 
    "_id": ObjectId("4d17ac603ffcf6d01300002a"), 
    "title": "Peugeot 206 2001-X-Reg, 1.4lx Air-con, 12 months mot, Credit Cards Accepted.", 
    "description": "PEUGEOT 206 1.4LX IMMACULATE THROUGHOUT DRIVES ABSOLUTELY SUPERB", 
    "params": { 
    carBrand: "PEUGEOT", 
    carModel: "206 LX" 
    } 
} 

どうすればいいですか?ありがとう。

答えて

3

私はそれは本当に高価なようにあなたの代わりに使用し、ポストロード、PrePersistなどを使用していないお勧めstrategy="set" 例えば:

@EmbedMany(targetDocument="Field", strategy="set") 
0

タイプは@Hashですが、他のオブジェクトではなく連想配列のみを参照します。しかし、これはオブジェクトと連想配列の間で変換するためにPostLoadPrePersistイベントと組み合わせて使用​​します。

関連する問題