ray/ cake-database-module
Ray.Di 的 cakephp/database 模块
1.0.1
2018-04-27 01:22 UTC
Requires
- php: >=5.6.0
- cakephp/database: ~3.0
- ray/di: ~2.0
Requires (Dev)
- cakephp/datasource: ~3.0
- phpunit/phpunit: ^5.7
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