2012-05-07 9 views
5

Ich bin Tring folgendes zu tun:CakePHP Abfrage über mehrere Datenquellen finden

  • Meine Models ‚Unternehmen‘ in einem ‚default‘ Datenquelle gespeichert werden. In Modell habe ich die var $ useDbConfig = 'default';
  • Meine 'Benutzer'-Modelle werden in einer anderen Datenquelle namens ' users_db 'gespeichert. In diesem Modell setze ich den var $ useDbConfig = 'users_db';

Zwischen den Modellen 'Firma' und 'Benutzer' besteht eine 'belongTo'-Beziehung.

Ich möchte eine rekursive Suchabfrage durchführen, die alle Benutzer für jedes Unternehmen auf einmal zurückbringt. Ich habe das Gefühl, dass ich das mit Cake nicht so machen kann, wie es momentan ist.

Wenn ich versuche, die folgenden:

$res2 = $this->Company->find('all', array(
       'conditions' => array('Company.id' => 1), 
       'recursive'=>2 
      )); 

Ich erhalte eine Meldung, dass es nicht die Benutzer-Tabelle finden (seine in der Standardquelle suchen): Fehler: Tabelle user_groups für Modell Benutzer nicht in Datenquelle gefunden wurde Standard.

Gibt es eine Möglichkeit, das kann ich tun?

Vielen Dank für jede Hilfe bieten kann .....

kSeudo.

+1

1), was Ihre Verbände sind ?, 2) rekursive Verwendung ist nicht Idee - versuchen Sie stattdessen Contain Verhalten des CakePHP. Wenn es dann immer noch nicht funktioniert, posten Sie die Abfrage, die es auszuführen versucht. – Dave

+0

Hallo Dave, Danke für die Antwort. - Benutzermodell gehört zu Firma - Firmenmodell hasMany Benutzer Die Abfrage ist wie oben definiert. Das große Problem ist, dass Firmen- und Benutzermodelle in verschiedenen Datenbanken gespeichert sind. Glauben Sie, dass ich immer noch eine Suchabfrage verwenden kann, um das vollständige Ergebnis mit intakten Beziehungen zurückzuziehen? Ich werde schauen, ob "Containable" mir helfen kann. Vielen Dank! – kSeudo

+0

Ich bin mir nicht 100% sicher, aber ich glaube, dass Cake multi-db Abfragen gut behandelt. Was Sie in Ihrer Frage zeigen, ist nicht die Abfrage - das ist die CakePHP-Codezeile, die die Abfrage erstellt. Es würde Ihnen sehr helfen, Ihre Frage zu bearbeiten und die tatsächlich generierte Abfrage hinzuzufügen. – Dave

Antwort

0

Warum nicht Ihre ursprüngliche Aussage durch diese ersetzen:

$this->loadModel('User'); 
$res2 = $this->User->find('all', 
       array('conditions' => array('User.company_id' => 1))); 

Dadurch werden die gewünschten Ergebnisse produzieren.

Andernfalls, wenn Sie etwas aufgeräumter wollten, könnten Sie eine fetch_users() Funktion zu Ihrer Company Klasse hinzufügen, die eine ähnliche Logik implementiert.

0

Ok, Problem gelöst. Sobald ich die Datenquelle im Modell richtig eingestellt habe, scheint alles gut zu funktionieren.

Danke Jungs

+2

Wenn Sie dieser Antwort hinzufügen, wird diese Antwort besser und besser [akzeptiere deine Antwort auch. Akzeptierte Antworten machen diese Community zu einem besseren Ort] (http://meta.stackexchange.com/q/5234/150789) –