Настройка Doctrine CLI не совсем работает - PullRequest
0 голосов
/ 01 марта 2011

Все еще изо всех сил пытаюсь заставить доктрину работать должным образом в моей системе. У меня есть файл yaml, который описывает структуру моей базы данных и таблиц. (Я следую учебному пособию на Zendcast). У меня есть файл сценария доктрины как

#!/usr/bin/env php
<?php
chdir(dirname(__FILE__));
include('doctrine.php');

и файл doctrine.php содержит

<?php

// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/..'));

// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') :       'development'));

// Ensure library/ is on include_path
set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(),
)));

/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
APPLICATION_ENV,
APPLICATION_PATH . '/configs/application.ini'
);

$application->getBootstrap()->bootstrap('doctrine');
$config = $application->getOption('doctrine');

$cli = new Doctrine_Cli($config);
$cli->run($_SERVER['argv']);

Моя выдержка из application.ini

autoloaderNamespaces[] = "Doctrine_"

;--
;Database
;--
doctrine.dsn = "mysql://root:softna@localhost/gepm2"
doctrine.data_fixtures_path = APPLICATION_PATH "/configs/data/fixtures"
doctrine.sql_path           = APPLICATION_PATH "/configs/data/sql"
doctrine.migrations_path    = APPLICATION_PATH "/configs/migrations"
doctrine.yaml_schema_path   = APPLICATION_PATH "/configs/schema.yml"
doctrine.models_path        = APPLICATION_PATH "/../library/Gepm/Model"

Когда я бегу:

D:\www\gepm2\application\scripts>php doctrine build-all-reload

Я получаю обратную связь:

D:\www\gepm2\application\scripts>php doctrine build-all-reload
build-all-reload - Are you sure you wish to drop your databases? (y/n) y
build-all-reload - Successfully dropped database for connection named 'doctrine'
build-all-reload - Successfully created database for connection named 'doctrine'
build-all-reload - Created tables successfully
build-all-reload - Data was successfully loaded

Однако, когда я проверяю mysql, создается только база данных, таблицы не создаются. Я боролся с этим целый день. Кто-нибудь, помогите.


EDIT


Хорошо, теперь все заработало. Но, честно говоря, единственные изменения, которые я внес в код, заключались в 1. установить часовой пояс,
2. удалите подчеркивание из конца значения utoloaderNamespaces [], чтобы utoloaderNamespaces [] = "Doctrine_" стало autoloaderNamespaces [] = "Doctrine" и 3. переместите объявления базы данных доктрины в конец раздела [production] application.ini

Я настолько отстал от графика, над которым работаю, что не могу связываться с этими изменениями, чтобы понять, какое из них и почему оно работает. Я скажу позже, когда у меня будет время простоя. В то же время более знающий выродок может объяснить, почему это сработало. веселит.

1 Ответ

0 голосов
/ 02 марта 2011

Доктрина создает таблицы в БД путем загрузки моделей и чтения определений в каждой из этих моделей.Если CLI не может загрузить модели, создание таблицы завершится неудачно.К сожалению, задача CLI не сообщает об этом.

Далее я бы посоветовал вам проверить другие задачи CLI, такие как generate-migrations-diff и migrate.У меня были проблемы с ними в прошлом, и я успешно их решил.

...