NoSequenceDb.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <?php
  2. /**
  3. * Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
  4. */
  5. namespace Temando\Shipping\Model\ResourceModel\Db;
  6. use Magento\Framework\Model\AbstractModel;
  7. use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
  8. /**
  9. * Resource model for entities with no auto-increment primary key.
  10. *
  11. * @package Temando\Shipping\Model
  12. * @author Christoph Aßmann <christoph.assmann@netresearch.de>
  13. * @license https://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
  14. * @link https://www.temando.com/
  15. */
  16. abstract class NoSequenceDb extends AbstractDb
  17. {
  18. /**
  19. * Entities with no auto-increment ID must toggle "$_useIsObjectNew" property
  20. * to distinguish between create and update operations.
  21. * @see \Magento\Framework\Model\ResourceModel\Db\AbstractDb::isObjectNotNew
  22. *
  23. * @var bool
  24. */
  25. protected $_useIsObjectNew = true;
  26. /**
  27. * Entities with no auto-increment ID must toggle "$_isPkAutoIncrement" property
  28. * to preserve the ID field.
  29. * @see \Magento\Framework\Model\ResourceModel\Db\AbstractDb::saveNewObject
  30. *
  31. * @var bool
  32. */
  33. protected $_isPkAutoIncrement = false;
  34. /**
  35. * Determine persistence state. Primary key presence/absence
  36. * is not an indicator for entities with no auto-increment ID.
  37. *
  38. * @param AbstractModel $object
  39. * @return AbstractDb
  40. */
  41. protected function _beforeSave(AbstractModel $object)
  42. {
  43. $select = $this->_getLoadSelect($object->getIdFieldName(), $object->getId(), $object);
  44. $select->limit(1);
  45. $entityId = $this->getConnection()->fetchOne($select);
  46. $object->isObjectNew(!$entityId);
  47. return parent::_beforeSave($object);
  48. }
  49. }