zend framework 2 не предоставляет доступ к базе данных из консольного приложения

#php #database #zend-framework2 #console-application

#php #База данных #zend-framework2 #консольное приложение

Вопрос:

Я пытаюсь запустить контроллер с консоли, который будет использоваться для задания cron. Когда я запускаю следующий блок кода в http-контроллере, он работает отлично. Но когда я использую тот же блок кода в консольном контроллере и вызываю его из командной строки, я получаю сообщение об ошибке базы данных:

«Не удалось выполнить инструкцию (3D000 — 1046 — база данных не выбрана»

Я не могу понять, почему он не получает имя базы данных и, возможно, другие параметры из конфигурации local.php . Приветствуется любая подсказка

 // CODE BLOCK IN CONTROLLER
$sm = $this->getServiceLocator();
$dbAdapter = $sm->get('MymoduleServiceDb');
$actualDatabaseTableName = 'Operator';
$OperatorTableGateway = new TableGateway($actualDatabaseTableName,$dbAdapter);
$table = new OperatorTable($OperatorTableGateway);
$result = $table->getOperatorList();
var_dump($result->current());

And model class is
namespace MydoduleModel;

use ZendDbTableGatewayTableGateway;
use ZendDbSqlSelect;


class OperatorTable {

    protected $tableGateway;
    public function __construct(TableGateway $tableGateway) {
        $this->tableGateway = $tableGateway;
    }


    public function getOperatorList() {
        $select = new Select('Operator');
        $select->columns(array(
            'opId'=>'OperatorID',
            'ocode'=>'OperatorCode'
        ));

    $resultSet = $this->tableGateway->selectWith($select);  
    return $resultSet;
    }
}
  

Ответ №1:

Итак, я наконец нашел проблему. Все дело в ценности среды. Запрос HTTPS получал значение EVN из настройки apache. И настройка в application.config.php был ли $env = getenv(‘APP_ENV’) ? : ‘prod’;

и поскольку мой prod.local.php был какой-то пустой, у меня ничего не получалось.

Итак, я узнал, что если вы используете консольное приложение, параметр env value в apache не сработает или, по крайней мере, в моем случае, и вместо этого консоль будет использовать параметр в application.config.php