2017 © Pedro Peláez
 

library entity-merger

An entity merger

image

treehouselabs/entity-merger

An entity merger

  • Wednesday, July 22, 2015
  • by fieg
  • Repository
  • 2 Watchers
  • 1 Stars
  • 1,544 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 6 Versions
  • 0 % Grown

The README.md

Entity Merger

Entity Merger is a library that can merge two entities., (*1)

Build Status Scrutinizer Code Quality Code Coverage, (*2)

Usage

Define as a service:, (*3)

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

Then use it as followed:, (*4)

$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"

To update null values, you can hint the merger to do this:, (*5)

$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"

It is also possible to exclude fields by giving an array with property names which must be included:, (*6)

$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

It is also possible to pass an array with fields and values:, (*7)

$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"

The Versions