2009-05-14 23 views
1

Als Teil einer Webanwendung können Benutzer Dateien hochladen, die eine neue Tabelle in einer dedizierten MySQL-Datenbank zum Speichern der Daten generieren. Diese Daten können dann auf verschiedene Arten manipuliert werden.CakePHP Zugriff auf dynamisch erstellte Tabellen?

Die nächste Version dieser App wird in CakePHP geschrieben, und im Moment kann ich nicht herausfinden, wie Sie diese Tabellen zur Laufzeit dynamisch zuweisen.

Ich habe die verschiedenen Datenbankkonfigurationen eingerichtet und kann die Tabellen zum Datenupload einfach erstellen, aber sobald dies abgeschlossen ist kann ich nicht auf die neue Tabelle von der Steuerung als Teil der CRUD-Aktionen für die Daten zugreifen.

Ich hoffte, dass es entlang der Linien von

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

//use data 
} 

Aber es gibt den Fehler

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

Kann mir jemand helfen würde.

Antwort

1

Sie müssen $this->loadModel('newTable') aufrufen, um es richtig zu initialisieren. Cake muss $ this-> newTable ordnungsgemäß initialisieren und alle Callbacks aufrufen.

Natürlich brauchen Sie nicht $this->uses[] = 'newTable';, das nichts anderes tut, als einen weiteren Wert zum $ uses-Array hinzuzufügen.

+0

cool. Das ist definitiv ein Schritt in die richtige Richtung. Vielen Dank. Das einzige Problem ist, dass dies nur das Modell lädt, wenn die Datentabelle in der App-Datenbank ist, aber diese dynamischen Tabellen in ihrer eigenen Datenbank erstellt werden, muss ich irgendwie die useDbConfig des Modells ändern ... irgendwelche Ideen? –

+0

Es gefunden. Danke für das Posten, ich habe die API für loadModel() nachgeschlagen und habe ClassRegistry gefunden (was es nennt), das ein Array übergeben kann, das den zu verwendenden Datastore enthält. –

+0

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

0

Versuch:

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

Wenn Ihre Tabelle 'new_tables' genannt wird, sollten Sie den Modellnamen 'NewTable'

+0

Danke für Ihre Hilfe auch. :) Habe es jetzt funktioniert –

Verwandte Themen