2009-05-01 5 views
1

Ich habe ein Modell (Listings) das hat und gehört zu ein paar verschiedenen Modellen, ich würde gerne alle dieses Modell finden, wo es ein verwandtes Modell (Openhouses) hat eine Bedingung. Das 'hat und gehört zu' wird in den Modelldateien eingerichtet. Angebote hat viele Openhouses und Openhouses gehören zu Listings. (Und Angebote hat viele und blongs zu einigen anderen Modellen, wo ich die Daten will.)In CakePHP Wie kann ich einen Fund mit Bedingungen auf einem verwandten Gebiet tun?

Ich habe versucht.

$this->Listing->find('all', 
array('conditions' => 
array('Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'), 
'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s')) 
)); 

aber ohne Erfolg.

Error: 1054: Unknown column 'Openhouse.date' in 'where clause 

Ich weiß, dass ich auf dem Openhouse-Modell suchen und die dazugehörigen Anzeigen erhalten, aber dann werden die Daten in einem anderen Format zurückgegeben und ich brauche Rekursion Weg aufzudrehen Daten von meinen anderen Modellen zu erhalten. (Und ich am Ende mit doppelten openhouse Daten!). Ich kann bei Bedarf weitere Code-Beispiele veröffentlichen.

Meine Frage ist im Grunde muss ich nur das Openhouse-Modell abfragen und damit leben oder ist meine Syntax für das Setzen von Bedingungen auf verwandten Modellen falsch?

+0

Das ist wirklich nützlich für mir aber ist es auch möglich nach dem Openhouse.date Feld zu sortieren. Wenn ich in meinem Beispiel versuchte, das mit diesem gleich ist, hat es keinen Sinn. Ich debugged die Abfragen und Sortierung Feld und die Verknüpfung ist in getrennten Abfragen. $ this-> List-> find ('alle', array ('contain' => array ('Openhouse.conditions' => array ('Openhouse.date>' => $ openhouse_start-> format ('Ymd H: i : s '),' Openhouse.date <' => $ openhouse_end-> Format ('Ymd H: i: s'))), 'Openhouse.order' => Array ('Openhouse.date DESC'))) –

Antwort

2

Versuchen Sie folgendes:

$this->List->find('all', array(
    'contain' => array(
     'Openhouse.conditions' => array(
      'Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'), 
      'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s')) 
     ) 
    ) 
) 
+0

Funktioniert wie ein Charme danke! (Entschuldigung für die Verspätung, die ich an diesem Wochenende bekommen habe - aber ich bin endlich wieder an der Arbeit) – reconbot

+0

könnte man in diesem Beispiel auch Bedingungen auf dem Top-Level-Modell (List) angeben? konnte ich nur hinzufügen, um dieses = 'Bedingungen'> array ('List.name LIKE' => 'foo%'), direkt nach find ('all', array ( – the0ther

0

Versuchen Sie, eine $this->Listing->recursive = 2; vor dem Anruf, um alle zu finden. Das sollte die Tabellen vor dem Aufruf verknüpfen, der Ihnen Zugriff auf das Openhouse-Modell aus dem Auflistungsmodell gibt.

2

Wenn Sie viele verknüpfte Modelle haben, können Einstellungen, die auf 2 rekursiv sind, mehr Daten bringen, als Sie vielleicht möchten.

Wenn das wahr ist, gibt es eine Alternative zu dem, was die mavarro, können Sie auch versuchen, mit der Containable behaviour:

$this->Listing->find 
(
    'all', 
    array 
    (
     'conditions' => array 
     (
      'Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'), 
      'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s') 
     ), 
     'contain' => array('Openhouse') 
    ) 
); 
0
$this->List->find('all', array(
    'contain' => array(
     'conditions' => array(
      'Openhouse.date >' => $openhouse_start->format('Y-m-d H:i:s'), 
      'Openhouse.date <' => $openhouse_end->format('Y-m-d H:i:s') 
          ), 
     'order' => array('Openhouse.date DESC') 
        ) 
          ) 
) 
Verwandte Themen