peroks/model-store

模型存储:模型的永久数据存储。

0.1.1 2023-06-19 18:20 UTC

This package is auto-updated.

Last update: 2024-08-28 21:27:00 UTC


README

重要:此软件包仍然是实验性的,可能会不通知而更改!

它最初是peroks/model软件包的一部分,但现在已独立出来。由于它不再包含在最新版本的peroks/model中,我决定即使它还不稳定也要发布。

原因如下

此软件包的目的是永久存储模型。目前支持JSON文件MySql数据库(mysqli和pdo-mysql)。

模型存储是在永久存储之上的一层抽象。它会根据您的模型自动为您创建JSON文件数据库模式

模型存储提供了一个简单的接口,用于从永久存储中读取模型以及向永久存储中写入模型。

如何使用

存储接口

您当然可以直接访问JSON文件或MySql数据库,但推荐的方式是创建一个存储实例并使用存储接口

连接到模型存储

为了连接到模型存储,您必须创建一个新的存储实例。目前支持三种不同的模型存储:

  • JsonStore:JSON文件存储
  • PdoStore:PDO MySql存储
  • MysqlStore:原生MySql(mysqli)存储

您也可以创建自己的存储接口实现。

JSON文件存储

将模型存储在JSON文件中仅推荐用于非常小的数据存储,不超过几MB。它旨在用于开发快速原型设计,但不推荐用于生产。对于每个PHP请求,完整的JSON文件将被加载到内存中,随着文件的增长,它将消耗越来越多的ramcpu

要连接到JSON文件存储,只需提供包含您的模型的JSON文件的完整路径和文件名。如果文件不存在,它将被创建。

use Peroks\Model\Store\JsonStore;
$store = new JsonStore( '/<path>/<filename>.json' );

PDO MySql存储

要连接到PDO MySql存储,只需提供MySQL数据库的连接信息。如果不存在具有给定名称的数据库,将创建一个具有该名称的空数据库。

以下所有连接属性都是必需的,除了端口套接字,它们是互斥的。如果主机是localhost,则期望一个套接字。连接信息可以是数组对象

use Peroks\Model\Store\PdoStore;
$store = new PdoStore( [
    'host'   => 'localhost|<host name>|<ip address>',
    'name'   => '<db name>',
    'user'   => '<db username>',
    'pass'   => '<db password>',
    'port'   => '<port>',
    'socket' => '<socket>',
] );

原生MySql(mysqli)存储

如果您愿意,也可以使用原生的mysqli驱动程序连接到MySql数据库。只需将存储类PdoStore替换为MysqlStore

use Peroks\Model\Store\MysqlStore;
$store = new MysqlStore( [
    'host'   => 'localhost|<host name>|<ip address>',
    'name'   => '<db name>',
    'user'   => '<db username>',
    'pass'   => '<db password>',
    'port'   => '<port>',
    'socket' => '<socket>',
] );

创建和更新数据库模式

在使用数据库存储之前,您需要根据模型构建数据库模式。幸运的是,您不需要手动完成这项工作。要创建(并更新)数据库模式,请使用包含您想要存储的所有模型的 模型类名 数组的 build 方法。

use Peroks\Model\Store\MysqlStore;
$store = new MysqlStore( $connection );
$store->build( [
    MyModelOne::class,
    MyModelTwo::class,
    MyModelThree::class,
] );

如果一个模型包含 子模型,则会自动为子模型创建数据库表。您不需要在 build 方法中包含子模型。因此,如果您有模型层次结构,您只需提供您的 顶层 模型。

您只应在创建新的模型存储或模型更改时调用 build 方法。不要每次连接到存储时都调用 build

示例

以下示例假设已经创建了模型存储实例,即

use Peroks\Model\Store\MysqlStore;
$store = new MysqlStore( [
    'host'   => 'localhost|<host name>|<ip address>',
    'name'   => '<db name>',
    'user'   => '<db username>',
    'pass'   => '<db password>',
    'port'   => '<port>',
    'socket' => '<socket>',
] );

所有方法都将 模型类名 作为第一个参数接受。唯一的例外是 set,因为可以从模型实例推导出类名。

检查模型是否存在于存储中

$exists = $store->exists( MyModelOne::class, 123 );
$exists = $store->exists( MyModelOne::class, 'abc' );

按 id 获取单个模型

$stored_model = $store->get( MyModelOne::class, 123 );
$stored_model = $store->get( MyModelOne::class, 'abc' );

按 id 获取模型列表

$stored_models = $store->list( MyModelOne::class, [123, 'abc', 'xyz'] );

按属性值获取模型

filter 方法返回所有给定 类名 的模型,这些模型匹配属性 id 和其值,即

$stored_models = $store->filter( Artist::class, [
    'first_name' => 'Tom',
    'last_name'  => 'Waits',
] );

按类名获取所有模型

$stored_models = $store->all( Artist::class );

将或更新模型存储中的模型

$model = new Artist( [ 'first_name' => 'Tom', 'last_name' => 'Waits' ] );
$store->set( $model );

从存储中删除模型

$store->delete( MyModelOne::class, 123 );
$store->delete( MyModelOne::class, 'abc' );

安装

您需要 composer 来下载和安装此 。只需在您的项目中运行 composer require peroks/model-store 即可。