solis/expressive

PHP 对象关系映射器

v1.7.1 2019-02-25 14:02 UTC

README

Codacy Badge Codacy Badge Latest Stable Version License Build Status

Expressive 是一个基于 illuminate/database 并具有基于 schema 文件的对象定义的 ORM 库。

安装

此包通过 composer 安装。

composer require solis/expressive

使用方法

根据 phpschema 的规范定义对象结构。

{
  "database": {
    "repository": "pessoa",
    "keys": "ID"
  },
  "properties": [
    {
      "alias": "proID",
      "property": "ID",      
      "type": "int",
      "behavior": {        
        "required": "false",
        "autoIncrement": "true"
      }
    },
    {
      "alias": "proNome",
      "property": "nome",      
      "type": "string"
    },
    {
      "alias": "proInscricaoFederal",
      "property": "inscricaoFederal",      
      "type": "string"
    },
    {
      "alias": "proTipo",
      "property": "tipo",      
      "type": "int"
    },
    {
      "alias": "proSituacao",
      "property": "situacao",      
      "type": "int",
      "behavior": {
        "required":"false"
      }
    }
  ]
}

使用库提供的 ORM 功能的类必须扩展抽象类 Expressive 并声明 schema json 中指定的属性。

use Solis\Expressive\Classes\Illuminate\Expressive;
use Solis\Expressive\Magic\Concerns\HasMagic;

class Pessoa extends Expressive
{
    use HasMagic;

    protected $ID;
    protected $nome;
    protected $inscricaoFederal;
    protected $tipo;
    protected $situacao;
    
    /**
     * Pessoa constructor.
     */
    public function __construct()
    {
        parent::__construct();

        $this->start(dirname(__FILE__) . '/Pessoa.json');
    }
}   

start 方法负责从提供的路径构建 Schema 对象并将其分配给相应的类。

扩展 Expressive 的类必须使用 HasMagic trait 以通过 make 方法访问动态属性分配功能。

$Pessoa = Pessoa::make([
      "proNome"             => 'Fulano - ' . uniqid(rand()),
      "proInscricaoFederal" => '' . rand(11111111111111, 99999999999999) . '',
      "proTipo"             => 1      
]);

make 方法返回一个 ExpressiveAbstract 实例,该实例可以访问库提供的持久化操作。

操作

ExpressiveAbstract 实例可以使用的持久化操作列表

Count

返回表示持久化中记录计数的整数值。

$count = (new Pessoa()) ->count()

//$count = Pessoa::make([])->last($arguments = []);

Create

根据通过 make 构造对象的值创建持久化中的新记录。

Pessoa::make([
      "proNome"             => 'Fulano - ' . uniqid(rand()),
      "proInscricaoFederal" => '' . rand(11111111111111, 99999999999999) . '',
      "proTipo"             => 1      
])->create();

Delete

根据分配给活动记录的信息删除持久化中的记录。

Pessoa::make([
        'proID' => 1
])->search()->delete();

Last

根据分配给活动记录的信息返回持久化中的最后一个记录。

(new Pessoa())->last()

//Pessoa::make([])->last();

Replicate

根据分配给活动记录的信息复制持久化中现有的记录。

$instance = Pessoa::make([
    'proID' => 1,
])->last();

$instance->replicate();    

Search

根据分配给活动记录的信息返回持久化中现有的记录。

$instance = Pessoa::make([
    'proID' => 1
])->search();

Select

根据提供的参数和选项返回持久化中现有的记录关系。

$result = (new Pessoa())->select();

//$result = Pessoa::make([])->select($arguments = [], $options = []);

Update

根据分配给活动记录的信息更新持久化中现有的记录。

$instance = Pessoa::make(
    [
        'proID' => 1,        
    ]
)->search();

$instance->proNome = 'UPDATE TEST [ ' . Date('Y-m-d H:m:s') . ']';

$instance->update();

变更日志

查看 CHANGELOG 了解最近更新信息。

测试

$ composer test

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 LICENSE