ray/cake-database-module

Ray.Di 的 cakephp/database 模块

1.0.1 2018-04-27 01:22 UTC

This package is auto-updated.

Last update: 2024-09-07 05:56:20 UTC


README

这是为CakePHP Database提供的模块,用于Ray.Di

安装

Composer 安装

$ composer require ray/cake-database-module

模块安装

您可以通过这种方式将数据库连接实例注入到任何类中

use Ray\Di\AbstractModule;
use Ray\CakeDbModule\CakeDbModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new CakeDbModule('sqlite:///'));

        // or
        $this->install(new CakeDbModule('mysql://root@localhost/cake_db'));
    }
}

这将创建使用 SQLite 驱动器和内存数据库或使用 root 凭据连接到本地主机的 mysql 的 Cake\Database\Connection 实例。

您还可以更具体地传递一个配置数组,该数组与 Cake\Database\Connection 接受的数组相同

use Ray\Di\AbstractModule;
use Ray\CakeDbModule\CakeDbModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $config = [
            'className' => 'Cake\Database\Connection',
            'driver' => 'Cake\Database\Driver\Mysql',
            'username' => 'root',
            'password' => 'root',
            'database' => 'cake'
        ];
        $this->install(new CakeDbModule($config));
    }
}

最后,您可以依赖 cake 的 ConnectionManager 中已配置的连接,并通过名称注入连接

ConnectionManager::config('default', $config);
use Ray\Di\AbstractModule;
use Ray\CakeDbModule\CakeDbModule;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new CakeDbModule('default'));
    }
}

DI 特性

您可以通过使用 Ray\CakeDbModule\DatabaseInject 特性在任意类中注入连接实例

use Ray\CakeDbModule\DatabaseInject;

class MyThing
{
    use DatabaseInject;
}

这将使 getDbConnection()setDbConnection() 方法在您的类中可用,并且当使用注入器实例化 MyThing 时,将自动注入连接实例。

在事务中包装方法

您可以使用 @Transactional 注解使任何方法在事务中运行。这对于保存操作非常有用。

use DateTime;
use Ray\CakeDbModule\Annotation\Trasactional;
use Ray\CakeDbModule\DatabaseInject;

class MyThing
{
    use DatabaseInject;

    /**
     * This will run inside a new transaction
     *
     * @Transactional
     */
    public function storeSomething()
    {
        $this->db->insert(
            'posts',
            ['name' => 'First', 'show_on' => new DateTime('+3 days')],
            ['created' => 'datetime']
        );
    }
}

演示

$ php docs/demo/run.php
// It works!

要求

  • PHP 5.4+
  • hhvm