1

假设我们有 Collection 类Product。产品有多个附加变体。假设每个变体都有nameprice

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

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

}

然后我们创建一个产品并保存它:

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

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


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

$product->save();

模型被序列化并保存在 MongoDB 中,没有关于ProductVariant. 当然,当我们从数据库中检索这个产品时,我们会得到数组数组而不是数组ProductVariant

有没有一种简单的方法可以覆盖 Phalcon ODM 解析并使其将某些属性解析为对象(或对象数组)?

你怎么处理这样的案子?

4

1 回答 1

1

我在 ODM 模型上有一个“beforeSave”,它将我的“ProductVariants”转换为数组,在模型上插入 ProductVariant::class 名称。

然后,我使用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
于 2016-11-28T16:24:46.463 回答