Cakephp 3.0 ConnectionManager,Controller中的getDataSource

时间:2014-12-25 03:30:36

标签: cakephp-3.0

在CakePHP 3.0中,什么相当于从控制器内部调用getDataSource()(如cakephp 2.x中的$this->ModelName->getDataSource())?

我试过这个:

use Cake\Datasource\ConnectionManager;
$conn = ConnectionManager::get('my_connection');

由于此连接已经连接,为什么我需要提供' my_connection'?

如何从CakePHP 3.0中的Controller内部获取DataSource?

由于

3 个答案:

答案 0 :(得分:1)

  

添加了Database \ ConnectionManager :: get()。它取代了getDataSource()

CakePHP Cookbook 3

答案 1 :(得分:1)

开始,提交和回滚现在是连接上的函数,而不是数据源。使用$conn = ConnectionManager::get($connectionName),然后使用$conn->begin()$conn->commit()$conn->rollback()

http://book.cakephp.org/3.0/en/orm/database-basics.html#using-transactions

使用$this->Table->defaultConnectionName()获取要传递的连接名称。

答案 2 :(得分:0)

" my_connection"应该在cakephp 3 config中定义 .go到cakephp / config / app.php

'Datasources' => [
    'default' => [
        'className' => 'Cake\Database\Connection',
        'driver' => 'Cake\Database\Driver\Mysql',
        'persistent' => false,
        'host' => 'localhost',
        /**
         * CakePHP will use the default DB port based on the driver selected
         * MySQL on MAMP uses port 8889, MAMP users will want to uncomment
         * the following line and set the port accordingly
         */
        //'port' => 'non_standard_port_number',
        'username' => 'root',
        'password' => '',
        'database' => 'cake',
        'encoding' => 'utf8',
        'timezone' => 'UTC',
        'flags' => [],
        'cacheMetadata' => true,
        'log' => false,

连接名称是"默认"对于这种情况。

控制器中使用的每个模型都有一个Connection。 您可以通过此方法从模型中获取控制器中的连接。

$model=TableRegistry::get('table_name');
$connection = $model->connection();