Вход Регистрация
Файл: core/base_dao.php
Строк: 229
<?php

abstract class PEEP_BaseDao
{
    const 
DEFAULT_CACHE_LIFETIME = false;

    public abstract function 
getTableName();

    public abstract function 
getDtoClassName();
    
/**
     *
     * @var PEEP_Database
     */
    
protected $dbo;

    protected function 
__construct()
    {
        
$this->dbo = PEEP::getDbo();
    }

    
/**
     * Finds and returns mapped entity item
     *
     * @param int $id
     * @return PEEP_Entity
     */
    
public function findById( $id, $cacheLifeTime = 0, $tags = array() )
    {
        
$sql = 'SELECT * FROM ' . $this->getTableName() . ' WHERE `id` = ?';

        return 
$this->dbo->queryForObject($sql, $this->getDtoClassName(), array((int) $id), $cacheLifeTime, $tags);
    }

    
/**
     * Finds and returns mapped entity list
     *
     * @param array $idList
     * @return array
     */
    
public function findByIdList( array $idList, $cacheLifeTime = 0, $tags = array() )
    {
        if ( 
$idList === null || count($idList) === 0 )
        {
            return array();
        }
        
$sql = 'SELECT * FROM ' . $this->getTableName() . ' WHERE `id` IN(' . $this->dbo->mergeInClause($idList) . ')';

        return 
$this->dbo->queryForObjectList($sql, $this->getDtoClassName(), array(), $cacheLifeTime, $tags);
    }

    public function 
findListByExample( PEEP_Example $example, $cacheLifeTime = 0, $tags = array() )
    {
        if ( 
$example === null )
        {
            throw new 
InvalidArgumentException('argument must not be null');
        }

        
$sql = 'SELECT * FROM ' . $this->getTableName() . $example;

        return 
$this->dbo->queryForObjectList($sql, $this->getDtoClassName(), array(), $cacheLifeTime, $tags);
    }

    public function 
countByExample( PEEP_Example $example, $cacheLifeTime = 0, $tags = array() )
    {
        if ( 
$example === null )
        {
            throw new 
InvalidArgumentException('argument must not be null');
        }

        
$sql = 'SELECT COUNT(*) FROM ' . $this->getTableName() . $example;

        return 
$this->dbo->queryForColumn($sql, array(), $cacheLifeTime, $tags);
    }

    public function 
findObjectByExample( PEEP_Example $example, $cacheLifeTime = 0, $tags = array() )
    {
        if ( 
$example === null )
        {
            throw new 
InvalidArgumentException('argument must not be null');
        }

        
$example->setLimitClause(0, 1);
        
$sql = 'SELECT * FROM ' . $this->getTableName() . $example;

        return 
$this->dbo->queryForObject($sql, $this->getDtoClassName(), array(), $cacheLifeTime, $tags);
    }

    
/**
     * Returns all mapped entries of table
     *
     * @return array
     */
    
public function findAll( $cacheLifeTime = 0, $tags = array() )
    {
        
$sql = 'SELECT * FROM ' . $this->getTableName();

        return 
$this->dbo->queryForObjectList($sql, $this->getDtoClassName(), array(), $cacheLifeTime, $tags);
    }

    
/**
     * Returns count of all rows
     *
     * @return array
     */
    
public function countAll()
    {
        
$sql = 'SELECT COUNT(*) FROM ' . $this->getTableName();

        return 
$this->dbo->queryForColumn($sql);
    }

    
/**
     * Delete entity by id. Returns affected rows
     * @param int $id
     * @return int
     */
    
public function deleteById( $id )
    {
        
$id = (int) $id;
        if ( 
$id > 0 )
        {
            
$sql = 'DELETE FROM ' . $this->getTableName() . ' WHERE `id` = ?';
            
$result = $this->dbo->delete($sql, array($id));
            
$this->clearCache();
            return 
$result;
        }

        return 
0;
    }

    
/**
     * Deletes list of entities by id list. Returns affected rows
     *
     * @param array $idList
     * @return int
     */
    
public function deleteByIdList( array $idList )
    {
        if ( 
$idList === null || count($idList) === 0 )
        {
            return;
        }
        
$sql = 'DELETE FROM ' . $this->getTableName() . ' WHERE `id` IN(' . $this->dbo->mergeInClause($idList) . ')';

        
$this->clearCache();

        return 
$this->dbo->delete($sql);
    }

    public function 
deleteByExample( PEEP_Example $example )
    {
        if ( 
$example === null || mb_strlen($example->__toString()) === 0 )
        {
            throw new 
InvalidArgumentException('example must not be null or empty');
        }
        
$sql = 'DELETE FROM ' . $this->getTableName() . $example;

        
$this->clearCache();

        return 
$this->dbo->delete($sql);
    }

    
/**
     * Saves and updates Entity item
     * throws InvalidArgumentException
     *
     * @param PEEP_Entity $entity
     * 
     * @throws InvalidArgumentException
     */
    
public function save( $entity )
    {
        if ( 
$entity === null || !($entity instanceof PEEP_Entity) )
        {
            throw new 
InvalidArgumentException('Argument must be instance of PEEP_Entity and cannot be null');
        }

        
$entity->id = (int) $entity->id;

        if ( 
$entity->id > 0 )
        {
            
$this->dbo->updateObject($this->getTableName(), $entity);
        }
        else
        {
            
$entity->id = NULL;
            
$entity->id = $this->dbo->insertObject($this->getTableName(), $entity);
        }

        
$this->clearCache();
    }

    public function 
saveDelayed( $entity )
    {
        if ( 
$entity === null || !($entity instanceof PEEP_Entity) )
        {
            throw new 
InvalidArgumentException('Argument must be instance of PEEP_Entity and cannot be null');
        }

        
$entity->id = (int) $entity->id;

        if ( 
$entity->id > 0 )
        {
            
$this->dbo->updateObject($this->getTableName(), $entity, 'id', true);
        }
        else
        {
            
$entity->id = $this->dbo->insertObject($this->getTableName(), $entity, true);
        }

        
$this->clearCache();
    }

    public function 
delete( $entity )
    {
        
$this->deleteById($entity->id);
        
$this->clearCache();
    }

    public function 
findIdByExample( PEEP_Example $example, $cacheLifeTime = 0, $tags = array() )
    {
        if ( 
$example === null )
        {
            throw new 
InvalidArgumentException('argument must not be null');
        }

        
$example->setLimitClause(0, 1);
        
$sql = 'SELECT `id` FROM ' . $this->getTableName() . $example;

        return 
$this->dbo->queryForColumn($sql, array(), $cacheLifeTime, $tags);
    }

    public function 
findIdListByExample( PEEP_Example $example, $cacheLifeTime = 0, $tags = array() )
    {
        if ( 
$example === null )
        {
            throw new 
InvalidArgumentException('argument must not be null');
        }

        
$sql = 'SELECT `id` FROM ' . $this->getTableName() . $example;

        return 
$this->dbo->queryForColumnList($sql, array(), $cacheLifeTime, $tags);
    }

    protected function 
clearCache()
    {
        
$tagsToClear = $this->getClearCacheTags();

        if ( 
$tagsToClear )
        {
            
PEEP::getCacheManager()->clean($tagsToClear);
        }
    }

    
/**
     * @return array
     */
    
protected function getClearCacheTags()
    {
        return array();
    }
    
    protected function 
tableDataChanged()
    {
        
    }
}
Онлайн: 2
Реклама