function testGetForObject()
 {
     $object = new ChangeSetItemTest_Versioned(['Foo' => 1]);
     $object->write();
     $item = new ChangeSetItem(['ObjectID' => $object->ID, 'ObjectClass' => $object->baseClass()]);
     $item->write();
     $this->assertEquals(ChangeSetItemTest_Versioned::get()->byID($object->ID)->toMap(), ChangeSetItem::get_for_object($object)->first()->Object()->toMap());
     $this->assertEquals(ChangeSetItemTest_Versioned::get()->byID($object->ID)->toMap(), ChangeSetItem::get_for_object_by_id($object->ID, $object->ClassName)->first()->Object()->toMap());
 }
 /**
  * Add implicit changes that should be included in this changeset
  *
  * When an item is created or changed, all it's owned items which have
  * changes are implicitly added
  *
  * When an item is deleted, it's owner (even if that owner does not have changes)
  * is implicitly added
  */
 public function sync()
 {
     // Start a transaction (if we can)
     DB::get_conn()->withTransaction(function () {
         // Get the implicitly included items for this ChangeSet
         $implicit = $this->calculateImplicit();
         // Adjust the existing implicit ChangeSetItems for this ChangeSet
         /** @var ChangeSetItem $item */
         foreach ($this->Changes()->filter(['Added' => ChangeSetItem::IMPLICITLY]) as $item) {
             $objectKey = $this->implicitKey($item);
             // If a ChangeSetItem exists, but isn't in $implicit, it's no longer required, so delete it
             if (!array_key_exists($objectKey, $implicit)) {
                 $item->delete();
             } else {
                 $item->ReferencedBy()->setByIDList($implicit[$objectKey]['ReferencedBy']);
                 unset($implicit[$objectKey]);
             }
         }
         // Now $implicit is all those items that are implicitly included, but don't currently have a ChangeSetItem.
         // So create new ChangeSetItems to match
         foreach ($implicit as $key => $props) {
             $item = new ChangeSetItem($props);
             $item->Added = ChangeSetItem::IMPLICITLY;
             $item->ChangeSetID = $this->ID;
             $item->ReferencedBy()->setByIDList($props['ReferencedBy']);
             $item->write();
         }
     });
 }