met_mw/sorm

简单轻量级的ORM库。

v1.0.0 2017-02-25 00:20 UTC

This package is not auto-updated.

Last update: 2024-09-20 22:48:56 UTC


README

Build Status Coverage Status Latest Stable Version Latest Unstable Version Total Downloads License

SORM - 简单ORM(对象关系映射)

入门

注意!它只与MySQL/MariaDB兼容。

安装

composer require met_mw/sorm

启动

DataSource::i() - 获取数据源实例。DataSource::d() - 获取当前驱动。

// Add new driver (MySQL)
DataSource::i()->addDriver('mysql', new Mysql('127.0.0.1', 'db_name', 'charset', 'root', 'password'));
// Set current driver (if added only one driver, then it already current driver)
DataSource::i()->setCurrentDriver('mysql');
DataSource::d()->connect();

模型

模型是从基类Entity扩展的,并指定数据库表名。

/**
  * FirstModel
  * 
  * @property int $id
  * @property string $name
  */
class FirstModel extends Entity 
{
    protected $tableName = 'first_model_table_name';
}

/**
  * FirstModelChild
  *
  * @property int $id
  * @property string $name
  * @property int $first_model_id
  */
class FirstModelChild extends Entity 
{
    protected $tableName = 'fist_model_child_table_name';
}

关系

关系是通过公开模型方法实现的。

/**
  * FirstModel
  * 
  * @property int $id
  * @property string $name
  */
class FirstModel extends Entity 
{
    protected $tableName = 'first_model_table_name';
  
    public function getFirstModelChilds() 
    {
        /** @var FirstModelChild[] $aFirstModelChilds */
        $aFirstModelChilds = $this->findRelationCache('id', FirstModelChild::cls()); // Search in cache
        if (empty($aFirstModelChilds)) { // If no cache, then load data from data source
            $oFirstModelChilds = DataSource::i()->factory(FirstModelChild::cls()); // Create empty model
            $oFirstModelChilds->getQueryBuilder()
                ->where('first_model_id', '=',  $this->id); // Build search conditions
            $aFirstModelChilds = $oFirstModelChilds->loadAll();
            
            // Caching data
            foreach ($aFirstModelChilds as $oFirstModelChild) {
                $this->addRelationCache('id', $oFirstModelChild);
                $oFirstModelChild->addRelationCache('first_model_id', $this);
            }
        }
        
        return $aFirstModelChilds;
    }
}
/**
  * FirstModelChild
  *
  * @property int $id
  * @property string $name
  * @property int $first_model_id
  */
class FirstModelChild extends Entity 
{
    protected $tableName = 'fist_model_child_table_name';
  
    public function getFirstModel() 
    {
        /** @var FirstModel[] $aFirstModels */
        $aFirstModels = $this->findRelationCache('id', FirstModel::cls()); // Search in cache
        if (empty($aFirstModels)) { // If no cache, then load data from data source
            $oFirstModels = DataSource::i()->factory(FirstModel::cls()); // Create empty model
            $oFirstModels->getQueryBuilder()
                ->where('id', '=', $this->first_model_id); // Build search conditions
            $aFirstModels = $oFirstModels->loadAll();
      
            // Caching data
            foreach ($aFirstModels as $oFirstModel) {
                $this->addRelationCache('first_model_id $oFirstModel);
                $oFirstModel->addRelationCache('id', $this);
            }
        }
    
        return isset($aFirstModels[0]) ? $aFirstModels[0] : null;
    }
}

示例

创建新实体

/** @var FirstModel $oFirstModel */
$oFirstModel = DataSource::i()->factory(FirstModel::cls()); // Create empty entity
$oFirstModel->name = 'Test name'; // Set entity data
$oFirstModel->save(); // Save entity data into data source

加载实体

/** @var FirstModel $oFirstModel */
$oFirstModel = DataSource::i()->factory(FirstModel::cls(), 1); // Load entity with Pk value 1
echo $oFirstModel->name; // Any use data
$oFirstModel->name = 'New test name'; // Change data
$oFirstModel->save(); // Save entity data into data source

使用关系

/** @var FirstModel $oFirstModel */
$oFirstModel = DataSource::i()->factory(FirstModel::cls(), 1); // Load entity with Pk value 1
$aFirstModelChilds = $oFirstModel->getFirstModelChilds(); // Load related entities

自由查询

以数组形式获取数据
DataSource::d()->query('select * from `table_name`'); // Execute query
$result = DataSource::d()->fetchAll(); // Fetch all data as array
以关联数组形式获取数据
DataSource::d()->query('select * from `table_name`'); // Execute query
$result = DataSource::d()->fetchAllAssoc(); // Fetch all data as assoc array
以数组形式获取数据行
DataSource::d()->query('select * from `table_name`'); // Execute query
$result = DataSource::d()->fetchRow(); // Fetch data row as array
以关联数组形式获取数据行
DataSource::d()->query('select * from `table_name`'); // Execute query
$result = DataSource::d()->fetchRowAssoc(); // Fetch data row as assoc array

许可证

met-mw/SORM包是开源软件,受MIT许可证许可。