insolis/repository-service-provider

为 Silex 提供的 Doctrine 存储库服务提供商

v2.0 2016-06-15 17:14 UTC

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));
}

致谢