Skip to content
Snippets Groups Projects
Select Git revision
  • ec47dea02473c33bd937ad859b4de71b88aeb5ab
  • master default protected
  • update-min-openvox-version-07f8cb2
  • cleanup_fixtures
  • add-openvox
  • freebsd-14
  • remove-legacy-top-scope-syntax
  • rel430
  • tests
  • revert-363-augeas-module-cleanup
  • release-4.1.0
  • puppet8
  • relax-dependencies
  • rel400
  • mode
  • puppet7
  • release-3.1.0
  • freebsd13
  • freebsd11
  • stdlib
  • centos
  • v6.0.0
  • v5.1.0
  • v5.0.0
  • v4.5.0
  • v4.4.0
  • v4.3.0
  • v4.2.1
  • v4.2.0
  • v4.1.0
  • v4.0.0
  • v3.1.0
  • v3.0.0
  • v2.0.0
  • 1.12.0
  • 1.11.0
  • 1.10.0
  • 1.9.0
  • 1.8.0
  • 1.7.0
  • 1.6.0
41 results

test_postfix_canonical.aug

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    AbstractDbMapper.php 7.78 KiB
    <?php
    namespace ZfcUser\Mapper;
    
    use Laminas\Db\Adapter\Adapter;
    use Laminas\Db\Adapter\Driver\ResultInterface;
    use Laminas\Db\ResultSet\HydratingResultSet;
    use Laminas\Db\Sql\Select;
    use Laminas\Db\Sql\Sql;
    use Laminas\Db\Sql\TableIdentifier;
    use Laminas\Hydrator\HydratorInterface;
    use Laminas\Hydrator\ClassMethodsHydrator;
    use ZfcUser\Entity\UserInterface as UserEntityInterface;
    use ZfcUser\EventManager\EventProvider;
    use ZfcUser\Db\Adapter\MasterSlaveAdapterInterface;
    
    abstract class AbstractDbMapper extends EventProvider
    {
        /**
         * @var Adapter
         */
        protected $dbAdapter;
    
        /**
         * @var Adapter
         */
        protected $dbSlaveAdapter;
    
        /**
         * @var HydratorInterface
         */
        protected $hydrator;
    
        /**
         * @var UserEntityInterface
         */
        protected $entityPrototype;
    
        /**
         * @var HydratingResultSet
         */
        protected $resultSetPrototype;
    
        /**
         * @var Select
         */
        protected $selectPrototype;
    
        /**
         * @var Sql
         */
        private $sql;
    
        /**
         * @var Sql
         */
        private $slaveSql;
    
        /**
         * @var string
         */
        protected $tableName;
    
        /**
         * @var boolean
         */
        private $isInitialized = false;
    
        /**
         * Performs some basic initialization setup and checks before running a query
         * @throws \Exception
         * @return null
         */
        protected function initialize()
        {
            if ($this->isInitialized) {
                return;
            }
            if (!$this->dbAdapter instanceof Adapter) {
                throw new \Exception('No db adapter present');
            }
            if (!$this->hydrator instanceof HydratorInterface) {
                $this->hydrator = new ClassMethodsHydrator;
            }
            if (!is_object($this->entityPrototype)) {
                throw new \Exception('No entity prototype set');
            }
    
            $this->isInitialized = true;
        }
    
        /**
         * @param string|null $table
         * @return Select
         */
        protected function getSelect($table = null)
        {
            $this->initialize();
    
            return $this->getSlaveSql()->select($table ?: $this->getTableName());
        }
    
        /**
         * @param Select $select
         * @param UserEntityInterface|null $entityPrototype
         * @param HydratorInterface|null $hydrator
         * @return HydratingResultSet
         */
        protected function select(Select $select, UserEntityInterface $entityPrototype = null, HydratorInterface $hydrator = null)
        {
            $this->initialize();
            $stmt = $this->getSlaveSql()->prepareStatementForSqlObject($select);
            $resultSet = new HydratingResultSet(
                $hydrator ?: $this->getHydrator(),
                $entityPrototype ?: $this->getEntityPrototype()
            );
            $resultSet->initialize($stmt->execute());
            return $resultSet;
        }
    
        /**
         * @param UserEntityInterface $entity
         * @param string|TableIdentifier|null $tableName
         * @param HydratorInterface|null $hydrator
         * @return ResultInterface
         */
        protected function insert(UserEntityInterface $entity, $tableName = null, HydratorInterface $hydrator = null)
        {
            $this->initialize();
            $tableName = $tableName ?: $this->tableName;
            $sql = $this->getSql()->setTable($tableName);
            $insert = $sql->insert();
            $rowData = $this->entityToArray($entity, $hydrator);
            $insert->values($rowData);
            $statement = $sql->prepareStatementForSqlObject($insert);
            return $statement->execute();
        }
    
        /**
         * @param UserEntityInterface $entity
         * @param string|array|\Closure $where
         * @param string|TableIdentifier|null $tableName
         * @param HydratorInterface|null $hydrator
         * @return ResultInterface
         */
        protected function update(UserEntityInterface $entity, $where, $tableName = null, HydratorInterface $hydrator = null)
        {
            $this->initialize();
            $tableName = $tableName ?: $this->tableName;
            $sql = $this->getSql()->setTable($tableName);
            $update = $sql->update();
            $rowData = $this->entityToArray($entity, $hydrator);
            $update->set($rowData)
                ->where($where);
            $statement = $sql->prepareStatementForSqlObject($update);
            return $statement->execute();
        }
    
        /**
         * @param string|array|\Closure $where
         * @param string|TableIdentifier|null $tableName
         * @return ResultInterface
         */
        protected function delete($where, $tableName = null)
        {
            $tableName = $tableName ?: $this->tableName;
            $sql = $this->getSql()->setTable($tableName);
            $delete = $sql->delete();
            $delete->where($where);
            $statement = $sql->prepareStatementForSqlObject($delete);
            return $statement->execute();
        }
    
        /**
         * @return string
         */
        protected function getTableName()
        {
            return $this->tableName;
        }
    
        /**
         * @return UserEntityInterface
         */
        public function getEntityPrototype()
        {
            return $this->entityPrototype;
        }
    
        /**
         * @param UserEntityInterface $entityPrototype
         * @return AbstractDbMapper
         */
        public function setEntityPrototype(UserEntityInterface $entityPrototype)
        {
            $this->entityPrototype = $entityPrototype;
            $this->resultSetPrototype = null;
            return $this;
        }
    
        /**
         * @return Adapter
         */
        public function getDbAdapter()
        {
            return $this->dbAdapter;
        }
    
        /**
         * @param Adapter $dbAdapter
         * @return AbstractDbMapper
         */
        public function setDbAdapter(Adapter $dbAdapter)
        {
            $this->dbAdapter = $dbAdapter;
            if ($dbAdapter instanceof MasterSlaveAdapterInterface) {
                $this->setDbSlaveAdapter($dbAdapter->getSlaveAdapter());
            }
            return $this;
        }
    
        /**
         * @return Adapter
         */
        public function getDbSlaveAdapter()
        {
            return $this->dbSlaveAdapter ?: $this->dbAdapter;
        }
    
        /**
         * @param Adapter $dbSlaveAdapter
         * @return AbstractDbMapper
         */
        public function setDbSlaveAdapter(Adapter $dbSlaveAdapter)
        {
            $this->dbSlaveAdapter = $dbSlaveAdapter;
            return $this;
        }
    
        /**
         * @return HydratorInterface
         */
        public function getHydrator()
        {
            if (!$this->hydrator) {
                $this->hydrator = new ClassMethodsHydrator(false);
            }
            return $this->hydrator;
        }
    
        /**
         * @param HydratorInterface $hydrator
         * @return AbstractDbMapper
         */
        public function setHydrator(HydratorInterface $hydrator)
        {
            $this->hydrator = $hydrator;
            $this->resultSetPrototype = null;
            return $this;
        }
    
        /**
         * @return Sql
         */
        protected function getSql()
        {
            if (!$this->sql instanceof Sql) {
                $this->sql = new Sql($this->getDbAdapter());
            }
            return $this->sql;
        }
    
        /**
         * @param Sql $sql
         * @return AbstractDbMapper
         */
        protected function setSql(Sql $sql)
        {
            $this->sql = $sql;
            return $this;
        }
    
        /**
         * @return Sql
         */
        protected function getSlaveSql()
        {
            if (!$this->slaveSql instanceof Sql) {
                $this->slaveSql = new Sql($this->getDbSlaveAdapter());
            }
            return $this->slaveSql;
        }
    
        /**
         * @param Sql $sql
         * @return AbstractDbMapper
         */
        protected function setSlaveSql(Sql $sql)
        {
            $this->slaveSql = $sql;
            return $this;
        }
    
        /**
         * Uses the hydrator to convert the entity to an array.
         *
         * Use this method to ensure that you're working with an array.
         *
         * @param UserEntityInterface $entity
         * @param HydratorInterface|null $hydrator
         * @return array
         */
        protected function entityToArray(UserEntityInterface $entity, HydratorInterface $hydrator = null)
        {
            if (!$hydrator) {
                $hydrator = $this->getHydrator();
            }
    
            return $hydrator->extract($entity);
        }
    }