2016-11-14 12 views
1

コレクションクラスProductがあるとします。製品にはさらに複数のバリエーションがあります。たとえば、各バリアントにという名前のの価格がであるとします。Phalcon ODMの解析モデルのオブジェクトを配列ではなくオブジェクトとして処理するにはどうすればいいですか?

class ProductVariant 
{ 
    public $name; 
    public $price; 
} 

/* 
* @property string $name 
* @property ProductVariant[] $variants 
*/ 
class Product extends \Phalcon\Mvc\Collection 
{ 

} 

その後、我々は製品を作成し、それを保存します。モデルは、MongoDBので連載して保存されます

$variant1 = new ProductVariant(); 
$variant2 = new ProductVariant(); 

$variant1->name = '...'; 
$variant2->name = '...'; 


$product = new Product(); 
$product->name = '...'; 
$product->variants = array($variant1, $variant2); 

$product->save(); 

ProductVariantについての情報はありません。もちろん、データベースからこの製品を取得するときには、配列ProductVariantではなく配列の配列を取得します。

Phalcon ODM解析をオーバーライドして、オブジェクト(またはオブジェクトの配列)としていくつかの特性を解析できるようにする簡単な方法はありますか?

このようなケースをどうやって手渡しますか?

答えて

1

私は、 'ProductVariants'を配列に変換し、モデルにProductVariant :: class名を挿入する 'beforeSave'をODMモデルに持っています。

次に、afterFetchafterSaveを使用して、クラス名を使用して名前が構成されたファクトリまたはビルダーを使用して、配列を 'ProductVariants'に変換し直します。擬似コードの

例:

beforeSave: 
$currentProduct = $productVariant->toArray(); 
$currentProduct['class'] = get_class($productVariant); 


afterFetch 
$builderName = $currentProduct->class.'Builder'; 
$builder = new $builderName(); 
$productVariant = $builder->create($currentProduct); 


afterSave = afterFetch 
関連する問題