insolis / repository-service-provider
为 Silex 提供的 Doctrine 存储库服务提供商
Requires
- php: >=5.5.9
- doctrine/dbal: ~2.1
This package is not auto-updated.
Last update: 2024-09-14 14:14:18 UTC
README
此服务提供商提供了一种简单的方式来为您的 Silex 数据库创建存储库。
要求
此服务提供商是为了与 Silex 扩展 DoctrineServiceProvider
一起使用而构建的。有关如何使用它的说明,请参阅 Silex DoctrineServiceProvider 文档。
安装
将 insolis/repository-service-provider
添加到您的 composer.json
文件中。
配置
注册服务提供商
$app->register( new Insolis\Provider\RepositoryServiceProvider(), array( 'repository.repositories' => array( 'projects' => 'MyProject\Repository\Project', ) ) );
服务提供商期望参数 repository.repositories
已设置,并且是一个以服务名称为键,存储库类为值的关联数组。
在上面的例子中,projects
服务将通过 Pimple(即,您可以通过 $app['projects']
访问它)使用 MyProject\Repository\Project
类来公开。
用法
正如您可能已经猜到的,您需要为要使用的每个存储库实现一个具体的类。该存储库必须扩展 Insolis\Repository
并实现 getTableName
方法,该方法应返回与该存储库绑定的数据库表名。
在上面的例子中,假设您的项目存储在 project
表中,那么 MyProject\Repository\Project
类将如下所示
namespace MyProject\Repository; use Insolis\Repository; class Project extends Repository; { public function getTableName() { return 'project'; } }
默认存储库实现公开了一些用于操作数据库的方法,这些方法基本上是 Doctrine\DBAL\Connection
方法的代理
insert(array $data)
$app['projects']->insert(array( 'title' => 'foo', 'description' => 'A project' ));
将在表中将一个项目插入,标题为 "foo",描述为 "A project"。
update(array $data, array $identifier)
$app['projects']->update(array('title' => 'bar'), array('title' => 'foo'));
将更新所有项目的 title
,从 "foo" 更改为 "bar"。
delete(array $identifier)
$app['projects']->delete(array('title' => 'bar'));
将删除所有标题为 "bar" 的项目。
find($id)
$app['projects']->find(42);
返回 id 字段为 42 的项目。
findAll()
$app['projects']->findAll();
返回整个表的内容。
count()
$app["projects"]->count();
返回表中的所有记录数。
扩展存储库
扩展存储库就像向其添加方法一样简单。例如,您可以添加一个 findByTitle($title)
方法来返回基于标题的所有项目
public function findByTitle($title) { return $this->db->fetchAll(sprintf("SELECT * FROM %s WHERE title = ?;", $this->getTableName()), array($title)); }
致谢
- KnpLabs 提供原始代码
- Joshua Morse 提供初始代码提取
- Gábor Fási 提供扩展维护