Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
AbstractEntity.php
Go to the documentation of this file.
1 <?php
7 
11 abstract class AbstractEntity extends \Magento\Eav\Model\Entity\AbstractEntity
12 {
16  protected $entitySnapshot;
17 
22 
30  public function __construct(
31  \Magento\Eav\Model\Entity\Context $context,
32  \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
33  \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
34  $data = []
35  ) {
36  $this->entitySnapshot = $entitySnapshot;
37  $this->entityRelationComposite = $entityRelationComposite;
38 
39  parent::__construct($context, $data);
40  }
41 
45  protected function _afterLoad(\Magento\Framework\DataObject $object)
46  {
47  $this->entitySnapshot->registerSnapshot($object);
48  return parent::_afterLoad($object);
49  }
50 
54  public function save(\Magento\Framework\Model\AbstractModel $object)
55  {
59  if ($object->isDeleted()) {
60  return $this->delete($object);
61  }
62 
63  $this->beginTransaction();
64 
65  try {
66  if (!$this->isModified($object)) {
67  $this->entityRelationComposite->processRelations($object);
68  $this->commit();
69  return $this;
70  }
71 
72  $object->validateBeforeSave();
73  $object->beforeSave();
74 
75  if ($object->isSaveAllowed()) {
76  if (!$this->isPartialSave()) {
77  $this->loadAllAttributes($object);
78  }
79 
80  if ($this->getEntityTable() == \Magento\Eav\Model\Entity::DEFAULT_ENTITY_TABLE
81  && !$object->getEntityTypeId()
82  ) {
83  $object->setEntityTypeId($this->getTypeId());
84  }
85 
86  $object->setParentId((int)$object->getParentId());
87 
88  $this->objectRelationProcessor->validateDataIntegrity($this->getEntityTable(), $object->getData());
89 
90  $this->_beforeSave($object);
91  $this->_processSaveData($this->_collectSaveData($object));
92  $this->_afterSave($object);
93  $this->entitySnapshot->registerSnapshot($object);
94  $object->afterSave();
95  $this->entityRelationComposite->processRelations($object);
96  }
97 
98  $this->addCommitCallback([$object, 'afterCommitCallback'])->commit();
99  $object->setHasDataChanges(false);
100  } catch (\Exception $e) {
101  $this->rollBack();
102  $object->setHasDataChanges(true);
103  throw $e;
104  }
105 
106  return $this;
107  }
108 
116  protected function isModified(\Magento\Framework\Model\AbstractModel $object)
117  {
118  return $this->entitySnapshot->isModified($object);
119  }
120 }
_afterLoad(\Magento\Framework\DataObject $object)
save(\Magento\Framework\Model\AbstractModel $object)
__construct(\Magento\Eav\Model\Entity\Context $context, \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot, \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite, $data=[])
isModified(\Magento\Framework\Model\AbstractModel $object)