CodeIgniter and Doctrine: базовая таблица или представление не найдены - PullRequest
0 голосов
/ 14 октября 2010

Я следую документации почти дословно, за исключением двух корректировок, которые я считаю исправлениями.

Первая корректировка: я исключаю лишнюю DIRECTORY_SEPARATOR в system/application/doctrine.php:

//this produces "...system/application//fixtures"
$config = array('data_fixtures_path'  =>  dirname(__FILE__) . DIRECTORY_SEPARATOR . '/fixtures',

//Replaced with:
$config = array('data_fixtures_path'  =>  dirname(__FILE__) . DIRECTORY_SEPARATOR . 'fixtures',

Полученные пути выглядят правильными.

Вторая настройка: Сгенерированные модели (например, models/User.php), похоже, не загружают базовые модели, которые расширяют Doctrine_Record, поэтомуЯ добавляю явный вызов require() к каждой модели следующим образом:

require('generated/BaseUser.php');

class User extends BaseUser { ... }

Итак, моя текущая проблема: когда приходит время создавать таблицы в первый раз:

$ ./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 'mydb'
build-all-reload - Successfully created database for connection named 'mydb'
build-all-reload - Created tables successfully
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mydb.user' doesn't exist

Doctrine, кажется, счастливо очищает таблицы, удаляет таблицы, удаляет базы данных и создает базы данных, но я не могу понять, почему он не создает таблицы.В нем четко указано Created tables successfully, но SHOW TABLES; возвращает «Таблицы не найдены в базе данных».

Doctrine использует того же пользователя MySQL, что и я, с ALL PRIVILEGES.

Anyидеи, почему Doctrine не может создавать таблицы?Надеюсь, я просто слепой и / или тупой.

В качестве альтернативы, есть ли способ, которым я могу просто создать файл операторов SQL CREATE на основе моей схемы или моделей yaml, которые я могу запустить самостоятельно для отладки этоговопрос

Ответы [ 2 ]

0 голосов
/ 16 октября 2010

Возможно, вы уже сделали это, но не упомянули об этом, но у вас МОЖЕТ пропустить все необходимые команды "загрузки". Использование require здесь не лучшее решение.

Doctrine_Core::loadModels(realpath(dirname(__FILE__) . '/..') . DIRECTORY_SEPARATOR . 'models');

Это необходимо сделать для каждого каталога, который содержит файлы моделей, связанные с Doctrine (модели, базовые модели, таблицы, ...), поскольку он не работает рекурсивно. У меня была та же проблема, и определение loadModels для каждого из моих каталогов помогло.

0 голосов
/ 15 октября 2010

Возможно, имя таблицы «пользователь» может быть причиной в данном конкретном случае. Попробуйте установить другое имя для таблицы.

...