Doctrine SQL / генерация таблиц не удалась - PullRequest
1 голос
/ 19 сентября 2010

Я пытаюсь заставить Doctrine генерировать SQL из набора моделей, которые я создал ранее с помощью схемы YAML.Используя приведенный ниже код из руководства, на выходе должен быть набор запросов.

<code><?php
// test.php
require_once('bootstrap.php');

try 
{
    $models = Doctrine_Core::generateSqlFromModels('models/generated');

    echo '<pre>';
    var_dump($models);
    echo '
';} catch (Exception $ e) {echo $ e-> getMessage ();}

Однако результат этого кода:

NULL

, в то время как он должен вернуть строку с запросами SQL, как было сказано ранее.

Я также пробовал следующее:

<code><?php
// test.php
require_once('bootstrap.php');

try {
    $result = Doctrine_Core::createTablesFromModels('models/generated');

    echo '<pre>';
    var_dump($result);
    echo '
';} catch (Exception $ e) {echo $ e-> getMessage ();}

но это также возвращает:

NULL

Я не смог найти решение в руководстве, справочнике по API или в основных файлах Doctrine.Я надеюсь, что кто-то здесь знает.

Заранее спасибо.

Обновление: Не может быть из-за этой (старой?) Ошибки, потому чтоУ меня нет имени таблицы, начинающегося с A или B.

Обновление: Мой файл bootstrap.php выглядит следующим образом:

/**
 * Bootstrap Doctrine.php, register autoloader specify
 * configuration attributes and load models.
 */

require_once(dirname(__FILE__) . '/lib/vendor/doctrine/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
$manager = Doctrine_Manager::getInstance();
$conn = Doctrine_Manager::connection('pgsql://user:pass@localhost/dbname', 'doctrine');

$manager->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_ALL);
$manager->setAttribute(Doctrine_Core::ATTR_EXPORT, Doctrine_Core::EXPORT_ALL);
$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE);

Обновление: Я изменил строку:

$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE);

на:

$manager->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_AGGRESSIVE);

, но вывод

print_r(Doctrine_Core::filterInvalidModels(Doctrine_Core::loadModels('models/generated'))) 

по-прежнему пустой массив.

1 Ответ

0 голосов
/ 20 сентября 2010

Проблема заключалась в том, что сгенерированные названия моделей были такими:

<?php
abstract class BaseClass extends Doctrine_Record
{

}

Удаление абстрактного ключевого слова добилось цели. Все остальные модели Doctrine не используют ключевое слово abstract, поэтому его удаление не повредит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...