Как я могу прочитать параметры конфигурации БД из Cake Shell? - PullRequest
16 голосов
/ 09 октября 2010

Я хотел бы написать оболочку для торта, чтобы сделать ночное резервное копирование моей базы данных, используя mysqldump.Я мог бы сделать это как скрипт оболочки, но если я смогу втиснуть его в оболочку CakePHP, то получу дополнительное преимущество от его работы как на сервере разработки, так и на живом сервере, если я смогу автоматически читать параметры конфигурации базы данных,Я займусь защитной оболочкой и получу некоторое спокойствие, зная, что у меня частые резервные копии моей БД.

В своей оболочке я пытаюсь создать строку, которая начинается с "mysqldump --user= "и я хотел бы получить имя пользователя из app / config / database.php.Как я могу получить данные в database.php?

Ответы [ 5 ]

29 голосов
/ 18 апреля 2012

В торте 2.1 формат изменился на:

App::uses('ConnectionManager', 'Model');
$dataSource = ConnectionManager::getDataSource('default');
$username = $dataSource->config['login'];
10 голосов
/ 09 октября 2010

Следующий фрагмент должен помочь:

App::import('Core', 'ConnectionManager');
$dataSource = ConnectionManager::getDataSource('default');
$username = $dataSource->config['login'];
2 голосов
/ 23 апреля 2017

В CakePHP 3.x формат изменился на -

use Cake\Datasource\ConnectionManager;
$source = ConnectionManager::get('default');

debug($source); #Debugging the result

Результат:

object(Cake\Database\Connection) {
  'config' => [
    'password' => '*****',
    'username' => '*****',
    'host' => '*****',
    'database' => '*****',
    'driver' => 'Cake\Database\Driver\Mysql',
    'persistent' => false,
    'encoding' => 'utf8',
    'timezone' => 'UTC',
    'cacheMetadata' => true,
    'quoteIdentifiers' => false,
    'log' => false,
    'url' => null,
    'name' => 'remote'
  ],
  'driver' => object(Cake\Database\Driver\Mysql) {
    'connected' => false
  },
  'transactionLevel' => (int) 0,
  'transactionStarted' => false,
  'useSavePoints' => false,
  'logQueries' => false,
  'logger' => null
}

ПолучитьРезультат:

debug($source->config()); #Accessing the result

Результат:

[
  'driver' => 'Cake\Database\Driver\Mysql',
  'persistent' => false,
  'host' => 'localhost',
  'username' => 'username',
  'password' => 'password',
  'database' => 'database',
  'encoding' => 'utf8',
  'timezone' => 'UTC',
  'cacheMetadata' => true,
  'quoteIdentifiers' => false,
  'log' => false,
  'url' => null,
  'name' => 'remote'
]
1 голос
/ 30 января 2014

Только для совместного использования.

Для любого проекта cakephp, если для обработки больших данных использовать php в качестве cronjob или командной строки, я бы создал автономный сценарий php без cakephp, причина в том, что cakephp медленный(например, читать и обрабатывать 100К записей).

Чтобы упростить свою жизнь, я поместил все свои автономные сценарии в app / Vendor / myscripts / (например, app / Vendor / myscripts / process.php)

ниже также основной код, чтобы убедиться, что вы используете те же настройки базы данных в автономном скрипте с cakephp (протестировано с MySQL)

require_once '/XYZ/app/Config/database.php';
$database = new DATABASE_CONFIG;
try{
        $dblink = new PDO('mysql:host='.$database->default['host'].';dbname='.$database->default['database'], $database->default['login'],  $database->default['password'], array(PDO::ATTR_PERSISTENT => false));
        $dblink->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $dblink->exec('SET CHARACTER SET '.$database->default['encoding']);
} catch (Exception $e) {
        die('DB Error'. $e->getMessage());
}
0 голосов
/ 31 октября 2014

Пример в контроллере, Изменение нескольких БД для источников данных в CakePHP 2.5.x

App::uses('AppController', 'Controller');

class DemoController extends AppController {

public $uses = array('AppModel', 'GVA21', 'GVA01', 'GVA14', 'GVA24' );
public function test_dbs(){
    $this->autoRender=false;
    // Load ConnectManager
    App::uses('ConnectionManager', 'Model');
    // DataSource ['default']
    $MDM = $this->GVA14->find('count');
    echo "MDM.GVA14\n<br>";
    debug($MDM);
    // Get DataSource Config DB ['default'] and ['SRL']
    $confDeafult = ConnectionManager::$config->default;
    $confSrl = ConnectionManager::$config->SRL;
    // Change DataSource ['SRL']
    ConnectionManager::drop('default');
    ConnectionManager::create('default',$confSrl);  //<== Is permanet change Find All models Down
    // $this->GVA01->setDataSource('SRL'); //<== Is temp change Find model
    echo "SRL.GVA14\n<br>";
    $SRL = $this->GVA14->find('count');
    debug($SRL);
    $SRL = $this->GVA01->find('count');
    echo "SRL.GVA01\n<br>";
    debug($SRL);
    $SRL = $this->GVA21->find('count');
    echo "SRL.GVA21\n<br>";
    debug($SRL);
    // Change to DataSource ['default']
    debug(ConnectionManager::drop('default'));
    ConnectionManager::create('default',$confDeafult); //<== Is permanet change Find All models Down
    //$this->GVA01->setDataSource('default'); //<== Is temp change Find model
    $MDM = $this->GVA01->find('count');
    echo "MDM.GVA01\n<br>";
    debug($MDM);
    $MDM = $this->GVA21->find('count');
    echo "MDM.GVA21\n<br>";
    debug($MDM);
    ////FIN
    exit('FIN');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...