2010-10-14 2 views
0

Я следую the documentation почти слово в слово, за исключением двух корректировок, которые, я считаю, являются исправлениями.CodeIgniter и Doctrine: Базовый стол или вид не найдены

Первая настройка: Я устранить в system/application/doctrine.php избыточную DIRECTORY_SEPARATOR:

//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 

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

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

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

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

ответ

0

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

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

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

+0

Это было решение ... Доктрина не знала о базовых моделях. 'require' просто не работает. – Dolph

0

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

+0

Хорошо, я просто попробовал '$ this-> setTableName ('asdf');' и получил 'Базовая таблица или представление не найдено: 1146 Таблица 'mydb.asdf' не существует'. В базе данных все еще нет таблиц. – Dolph

+0

Попробуйте выполнить задачу ./doctrine build-sql (я не помню точное имя). Он генерирует файл с простым sql, который создает таблицы. Затем вы сможете решить, неправильно это в sql или в доктрине. –

+0

Он сгенерировал 'sql/schema.sql', который был пустым файлом ... нечетным, потому что он, очевидно, знает о моем ямле и моделях? – Dolph

Смежные вопросы