2012-05-07 13 views
5

jestem tring aby wykonać następujące czynności:CakePHP znaleźć kwerendy w wielu datasources

  • Moje modele „Spółka” są przechowywane w „default” źródłem danych. W modelu ustawiam var $ useDbConfig = 'default';
  • Moje modele użytkownika są przechowywane w innym źródle danych o nazwie "users_db". W tym modelu ustawiam var $ useDbConfig = "users_db";

Istnieje zależność "belongsTo" między modelami "Firma" i "Użytkownik".

Chcę wykonać zapytanie rekurencyjne, które spowoduje przywrócenie wszystkich użytkowników dla każdej firmy za jednym razem. Mam wrażenie, że nie mogę tego zrobić z Cake, tak jak jest obecnie.

Kiedy próbuję następujące:

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

pojawia się komunikat, że nie może znaleźć tabeli użytkowników (jego spojrzenie na źródło domyślne): Błąd: user_groups stół dla modelu użytkownik nie został znaleziony w źródle danych domyślnie.

Czy mogę to zrobić?

Wielkie dzięki za wszelką pomoc można zapewnić .....

kSeudo.

+1

1) Jakie są wasze stowarzyszenia ?, 2) za pomocą rekurencyjnych nie jest pomysł - spróbuj mieszczące zachowanie CakePHP zamiast. Następnie, jeśli nadal nie działa, opublikuj zapytanie, które próbuje uruchomić. – Dave

+0

cześć Dave, Dzięki za odpowiedź. - Model użytkownika należy do firmy - model firmy ma wielu użytkowników Zapytanie jest zdefiniowane powyżej. Dużym problemem jest to, że modele firmowe i użytkownika są przechowywane w różnych bazach danych. Czy uważasz, że mogę nadal używać kwerendy wyszukiwania do odzyskania pełnego wyniku z nienaruszonymi relacjami? Będę sprawdzać, czy "Containable" może mi pomóc. Wielkie dzięki! – kSeudo

+0

Nie jestem w 100% pewny, ale wierzę, że Cake poprawnie obsługuje zapytania wielodostępowe. To, co pokazujesz w swoim pytaniu, nie jest zapytaniem - to linia kodu CakePHP, która WYKONUJE zapytanie. Bardzo pomocne będzie edytowanie pytania i dodanie wygenerowanego zapytania. – Dave

Odpowiedz

0

Dlaczego nie zastąpi oryginalnego oświadczenie to:

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

To przyniesie pożądane wyniki.

W przeciwnym razie, jeśli chcesz coś porządniejszego, możesz dodać funkcję fetch_users() do klasy Company, która zaimplementowała podobną logikę.

0

Ok, problem rozwiązany. Po poprawnym ustawieniu źródła danych w modelu wszystko wydaje się działać dobrze.

Dzięki chłopaki

+2

Dodanie do tej odpowiedzi, jak ustawić źródło danych, sprawi, że ta odpowiedź będzie lepsza i [Przyjmij również odpowiedź. Zaakceptowane odpowiedzi czynią tę społeczność lepszym miejscem] (http://meta.stackexchange.com/q/5234/150789) –