Как сделать, чтобы свойства модели Phalcon ODM анализировались как объекты, а не как массивы?

Допустим, у нас есть класс коллекции Product, Продукты имеют несколько дополнительных вариантов. Допустим, каждый вариант имеет название а также цена.

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 и заставить его анализировать некоторые свойства как объекты (или массив объектов)?

Как ты делаешь такой случай?

1

Решение

У меня есть «beforeSave» в модели ODM, которая преобразует мои «ProductVariants» в массивы, вставляя в модель имя класса ProductVariant ::.

Тогда я использую afterFetch а также afterSave преобразовать массивы обратно в «ProductVariants», используя фабрику или конструктор, имя которого составлено с использованием имени класса.

Пример с псевдо-кодом:

beforeSave:
$currentProduct = $productVariant->toArray();
$currentProduct['class'] = get_class($productVariant);afterFetch
$builderName = $currentProduct->class.'Builder';
$builder = new $builderName();
$productVariant = $builder->create($currentProduct);afterSave = afterFetch
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]