ORM

目前 PhpBoot 提供基本的 ORM 支持,包括:

1. 定义实体

实体对应数据库的表, 实体的属性名和数据库的列名一致。下面是一个典型的实体定义:

/**
 * 图书信息
 * @table books
 * @pk id
 */
class Book
{
    /**
     * @var int
     */
    public $id;
    
    /**
     * 书名
     * @var string
     */
    public $name='';
    
    /**
     * 图片url
     * @var string[]
     */
    public $pictures=[];
}

其中:

  • @table 指定表名
  • @pk 指定表的主键
  • @var 定义列的类型,如果类型为对象或者数组,则保存到数据库是将被序列化为 json

可以看到,ORM 中的实体和接口中的实体很类似,事实上,我们鼓励在 ORM 和接口中复用实体类

2. 操作数据库

PhpBoot 提供量个组方法,modelmodels, 分别用于操作实体“实例”和实体“类”。

2.1. model 方法

model() 方法用于操作实体“实例”,或者说操作单个实体对象。

2.1.1 create

存储指定实体实例(对应 SQL 的 insert)

$book = new Book();
$book->name = ...
...

\PhpBoot\model($this->db, $book)->create();
echo $book->id; //获取自增主键的值

2.1.2 update

更新实体对应的数据库记录(对应 SQL 的 update)

$book = new Book();
$book->id = ...
...

\PhpBoot\model($this->db, $book)->update();

2.1.3 delete

删除实体对应的数据库记录(对应 SQL 的 delete )

$book = new Book();
$book->id = ...

\PhpBoot\model($this->db, book)->delete();

2.2 models 方法

models() 方法用于操作实体“类”,或者说操作一组实体。

2.2.1. find

根据主键查找(对应 SQL 的 select )

$book = \PhpBoot\models($this->db, Book::class)->find($id);

2.2.2. findWhere

根据组合查询条件查找(对应 SQL 的 select )

$books = \PhpBoot\models($this->db, Book::class)
    ->findWhere(['name'=>'abc'])
    ->get();

2.2.3. update

根据主键更新(对应 SQL 的 update )

\PhpBoot\models($this->db, Book::class)
    ->update(1 ['name'=>'abc']);

2.2.4. updateWhere

根据组合查询条件更新(对应 SQL 的 update )

\PhpBoot\models($this->db, Book::class)
    ->updateWhere(['name'=>'abc'], ['id'=>1])
    ->exec();

2.2.6. delete

根据主键删除(对应 SQL 的 delete )

\PhpBoot\models($this->db, Book::class)
    ->delete(1);

2.2.7. deleteWhere

根据组合查询条件删除(对应 SQL 的 delete )

\PhpBoot\models($this->db, Book::class)
    ->deleteWhere(['id'=>1])
    ->exec();