phpwax / slimmodel
Requires
- php: >=5.4.0
- doctrine/dbal: 2.5.*@dev
This package is not auto-updated.
Last update: 2024-09-24 02:01:29 UTC
README
Doctrine DBAL的轻量级ORM样式包装器
Slim-Model是一个小型库,它包装了Doctrine DBAL,允许快速原型设计,同时保留了许多原始庞大库的功能。
此包将所有重负载委托给Doctrine/DBAL,并摒弃了复杂对象的概念,用于模型和字段。相反,返回的一切都是普通的PHP对象。
Slim-Model能做什么
自动数据库同步
在开发模式下,Slim-model可以自动同步数据库到在define()
方法中定义的列。当不再需要此行为时,可以将模型对象设置为冻结。
正如之前,当因为模式异常而无法运行查询时,同步将自动触发。
如何安装
通过composer,只需将以下内容添加到任何项目的composer.json
文件中。
"require": {
"rossriley/slimmodel": "1.0.*@dev"
}
然后定义您的模型,如下所示,以扩展Base类。
<?php
use SlimModel\Base;
class Example extends Base {........}
运行测试。
运行单元测试以确保与API的一致性。克隆存储库然后运行...
composer update
这将把必要的依赖项放入vendor目录。
然后确保phpunit在您的路径中。如果不是,您需要安装它。
进入项目目录的根目录并运行
phpunit
希望您会看到一个漂亮的绿色条。
入门和基本用法
模型构建,传递连接
首先,您需要创建一个新的模型,该模型扩展SlimModel\Base
它看起来像下面这样...
....
use SlimModel\Base;
class Example extends Base {
protected $table = "example";
protected $primary_key = "id";
public function setup() {
$this->define("id", "integer", ["autoincrement"=>true]);
$this->define("title","string", []);
}
}
注意,此包中没有自动字段。您需要定义一个主键。
现在您有了模型,我们可以开始工作了。唯一的假设是您已经有了DBALConnection对象,可以传递进来。在实际应用中,您可能希望将对象创建委托给您的应用程序,以避免不断传递连接对象。为此示例,并且为了显示模块可以在没有任何紧密耦合的情况下工作,我们将将在构造时传递连接。
插入
插入到数据库只需传递属性数组。
$model = new Example($db_connection);
$result = $model->insert(["title"=>"Hello World"]);
更新
更新需要主键和一些要更新的数据。
$model = new Example($db_connection);
$result = $model->update(1, ["title"=>"Hello Again"]);
删除行
通过属性选择行并删除...
$model = new Example($db_connection);
$result = $model->delete(["id"=>1]);
查找行
这是一个快速助手,用于通过主键获取数据库行;例如
$model = new Example($db_connection);
$result = $model->find(1]);
// returns ["id"=>1, "title"=>"Hello Again"]
要执行任何更复杂的查询,请使用DBAL附带的查询构建器。您可以通过以下方式获取构建器对象
$queryBuilder = $db_connection->createQueryBuilder();
然后执行如下查询
$queryBuilder
->select('u.id', 'u.name')
->from('users', 'u')
->where('u.email = ?')
->setParameter(1, $userInputEmail)
;
它不能做什么
魔法。
数据以简单数据返回。如果您需要更复杂的东西,请编写辅助方法来转换。
通过使用查询构建器中的功能可以创建连接和高级过滤器。
关于定义字段类型的说明。
包括GUID在内的所有Doctrine DBAL类型都可用,因此请查阅API文档的详细信息,请参阅
http://www.doctrine-project.org/api/dbal/2.4/namespace-Doctrine.DBAL.Types.html
包括连接数据
精简模型可以通过includes
功能实现预加载和包含关联数据。注意:这主要用于简单用例时的辅助功能。如果您需要执行任何复杂操作,例如对连接表进行排序或过滤连接查询,则不支持此功能,但在这些情况下,最好使用查询构建器来优化性能。
示例:将图像与内容连接
首先,我们需要使用我们的内容模型来定义一个包含项。它将看起来像以下这样。
use SlimModel\Base;
class Content extends Base {
protected $table = "wildfire_content";
public function setup() {
$this->add_include("many", ["table"=>"media","as"=>"images"]);
}
}