如何将预取的数据映射到PHP中的模型?

问题描述 投票:0回答:2

鉴于我已经通过外部服务检索了几行作为数组。在基于 Symfony2 和 Doctrine 构建的 PHP 应用程序中。

我如何继续将数据映射到模型,以便我可以使用所有现有的业务逻辑?

*注意:*我不想自己对私有领域进行反思,也不想改变模型。

我尝试研究学说的内部结构,但很多内容似乎与查询逻辑紧密结合。我知道我可以实现一个工厂方法来在我的数据集上实例化模型,但感觉我的供应商文件夹中已经有所有类等待使用。

php mysql doctrine symfony-2.8
2个回答
0
投票

在 Symfony 中,您有 Serializer 组件

您可以使用composer将其安装为独立组件

composer require symfony/serializer

序列化对象

$person = new \App\Entity\Person();
$person->setName('foo');
$person->setAge(99);
$person->setSportsman(false);

$jsonContent = $serializer->serialize($person, 'json');

// $jsonContent contains {"name":"foo","age":99,"sportsman":false}

echo $jsonContent; // or return it in a Response

反序列化对象

$person = $serializer->deserialize($jsonContent, \App\Entity\Person::class, 'json');

0
投票

看看多功能对象映射器。只需向模型添加属性即可完全满足您的需要。它使用私有属性,与 symfony 序列化器不同,源数据的结构不需要与您的模型匹配。模型可以是 Doctrine 实体或任何其他类。

composer require zolex/vom

检查快速入门和完整的文档

这是具有属性的模型示例。

use Zolex\VOM\Mapping as VOM;

#[VOM\Model]
class MyClass
{
    #[VOM\Property]
    public string $onTheRoot;

    #[VOM\Property(accessor: 'deeper.inThe.structure')]
    public string $fromTheDeep;
}

在模型中输入数据:

$data = [
    'onTheRoot' => 'I live on the root',
    'deeper' [
        'inThe' => [
            'structure' => 'I live somewhere deeper in the data structure'
        ]
    ]
];

$vom->denormalize($data, MyClass::class);
© www.soinside.com 2019 - 2024. All rights reserved.