knplabs/repository-service-provider

此包已被废弃,不再维护。未建议替代包。

为Silex的Doctrine仓库服务提供商

dev-master 2022-09-23 13:28 UTC

This package is not auto-updated.

Last update: 2022-10-01 03:29:35 UTC


README

遗憾的是,我们决定不再维护此项目 anymore (查看原因)。如果您想标记另一个包作为此包的替代品,请发送电子邮件至 hello@knplabs.com

为Silex的Doctrine仓库服务提供商

此服务提供商提供了一种简单的方式来为silex数据库拥有仓库。

要求

此服务提供商已构建为与silex扩展的DoctrineServiceProvider一起工作。有关如何使用它的说明,请参阅Silex的DoctrineServiceProvider文档

配置

将仓库添加到依赖项中,然后注册自动加载

$app['autoloader']->registerNamespaces(array(
    /** Your other namespaces **/
    'Knp' => __DIR__.'/../vendor/KnpSilexExtensions/'
));

注册服务提供商

$app->register(
    new Knp\Provider\RepositoryServiceProvider(), array(
        'repository.repositories' => array(
            'projects' => 'MyProject\Repository\Project',
        )
    )
);

服务提供商期望参数repository.repositories被设置,并且是一个以服务名称为键,仓库类为值的关联数组。

在上面的示例中,projects服务将通过Pimple公开(即,您可以通过$app['projects']访问它),使用MyProject\Repository\Project类。

使用

如您现在所猜测的,您需要为要使用的每个仓库实现一个具体的类。该仓库必须扩展Knp\Repository并实现getTableName方法,该方法应返回绑定到该仓库的数据库表名。

在上面的示例中,假设您的项目存储在project表中,则MyProject\Repository\Project类将如下所示

<?php

namespace MyProject\Repository;

use Knp\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”的标题和“一个项目”的描述的项目。

update(array $data, array $identifier)

$app['projects']->update(array('title' => 'bar'), array('title' => 'foo'));

将更新所有标题为“foo”的项目。

delete(array $identifier)

$app['projects']->delete(array('title' => 'bar'));

将更新所有标题为“bar”的项目。

find($id)

$app['projects']->find(42);

返回主键为42的项目。

findAll()

$app['projects']->findAll();

返回整个表的内容。

扩展仓库

扩展仓库就像向其中添加方法一样简单。例如,您可以为它添加一个 findByTitle($title) 方法,以根据标题返回所有项目

public function findByTitle($title)
{
    return $this->db->fetchAll('SELECT * FROM project WHERE title = ?', array($title));
}

致谢