2009-05-14 4 views
1

В качестве части веб-приложения пользователи могут загружать файлы данных, которые генерируют новую таблицу в отдельной базе данных MySQL для хранения данных. Они могут затем манипулировать этими данными различными способами.CakePHP Доступ к динамически созданным таблицам?

Следующая версия этого приложения написана на CakePHP, и на данный момент я не могу понять, как динамически назначать эти таблицы во время выполнения.

У меня есть различные настройки базы данных, и вы можете создавать таблицы при загрузке данных как можно точнее, но как только это будет завершено, я не могу получить доступ к новой таблице с контроллера как часть действий CRUD записи для управления данными.

Я надеялся, что это было бы вдоль линий

function controllerAction(){ 
$this->uses[] = 'newTable'; 
$data = $this->newTable->find('all'); 

//use data 
} 

Но он возвращает ошибку

Undefined property: ReportsController::$newTable

Fatal error: Call to a member function find() on a non-object in /app/controllers/reports_controller.php on line 60

кто может помочь.

ответ

1

Чтобы правильно инициализировать его, вам необходимо позвонить $this->loadModel('newTable'). Cake необходимо правильно инициализировать $ this-> newTable и вызвать все обратные вызовы.

Конечно, вам не нужен $this->uses[] = 'newTable';, который ничего не делает, кроме добавления другого значения в массив $ uses.

+0

Круто. Это определенно шаг в правильном направлении. Благодарю. Единственная проблема заключается в том, что это только загружает модель, если таблица данных находится в базе данных приложения, но эти динамические таблицы создаются в их собственной базе данных, поэтому мне нужно каким-то образом изменить useDbConfig модели ... любые идеи? – 2009-05-14 10:01:47

+0

Нашел. Спасибо за публикацию, я просмотрел API для loadModel() и нашел ClassRegistry (который он вызывает), которому может быть передан массив, включающий в себя, какой datastore использовать. – 2009-05-14 10:11:05

+0

$ this-> newTable-> useDbConfig = 'otherDatabaseConfigVar'; – neilcrookes

0

попробовать:

function controllerAction() { 
    $data = ClassRegistry::init('ModelNameForNewTable')->find('all'); 
} 

Если таблица называется 'new_tables', название модели должно быть 'Новая_таблица'

+0

Спасибо за вашу помощь. :) Теперь он работает – 2009-05-14 10:15:41