【问题标题】:How to make Phalcon ODM parse model properies as objects but not arrays?如何使 Phalcon ODM 将模型属性解析为对象而不是数组?
【发布时间】:2016-11-14 14:07:08
【问题描述】:

假设我们有 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 解析并使其将某些属性解析为对象(或对象数组)?

你如何处理这种情况?

【问题讨论】:

    标签: php arrays mongodb phalcon phalcon-orm


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-04
      • 2019-10-16
      • 1970-01-01
      • 1970-01-01
      • 2022-01-03
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多