treehouselabs/entity-merger

此包已被废弃,不再维护。未建议替代包。
关于此包最新版本(2.0.2)的许可信息不可用。

实体合并器

2.0.2 2015-07-22 07:57 UTC

This package is not auto-updated.

Last update: 2020-01-24 14:47:43 UTC


README

实体合并器 是一个可以合并两个实体的库。

Build Status Scrutinizer Code Quality Code Coverage

使用方法

定义为一个服务

tree_house.entity_merger:
    class: TreeHouse\EntityMerger\EntityMerger
    arguments:
      - @jms_serializer
      - @doctrine
      - @jms_serializer.metadata_factory

然后按照以下方式使用

$merger = $container->get('tree_house.entity_merger');

$original = new Entity();
$original->setTitle('A');

var_dump($original->getAuthor()); // output: NULL

$update = new Entity();
$update->setTitle('B');
$update->setAuthor('TreeHouse');

$original = $merger->merge($original, $update);

var_dump($original->getTitle()) // output: "B"
var_dump($original->getAuthor()); // output: "TreeHouse"

要更新空值,您可以提示合并器执行此操作

$merger = $container->get('tree_house.entity_merger');

$original = new Entity();
$original->setTitle('A');

$update = new Entity();
$update->setTitle(null);
$update->setAuthor('TreeHouse');

$original = $merger->merge($original, $update, null, true);

var_dump($original->getTitle()) // output: NULL
var_dump($original->getAuthor()); // output: "TreeHouse"

也可以通过提供一个包含必须包含的属性名的数组来排除字段

$merger = $container->get('tree_house.entity_merger');

$original = new Entity();
$original->setTitle('A');

$update = new Entity();
$update->setTitle('B');
$update->setAuthor('TreeHouse');

// include the given fields, make sure to camelcase the fieldnames when needed
$exclusionStrategy = new \TreeHouse\EntityMerger\Serializer\Exclusion\FieldsExclusionStrategy([
    'title'
]);

$original = $merger->merge($original, $update, $exclusionStrategy);

var_dump($original->getTitle()) // output: "B"
var_dump($original->getAuthor()); // output: NULL

也可以传递一个包含字段和值的数组

$merger = $container->get('tree_house.entity_merger');

$original = new Entity();
$original->setTitle('A');
$original->setAuthor('TreeHouse');

$update = ['title' => 'new title'];

$original = $merger->merge($original, $update);

var_dump($original->getTitle()); // output: "new title"
var_dump($original->getAuthor()); // output: "TreeHouse"