In CakePHP, wie kann ich eine Suche mit Bedingungen auf einem verwandten Bereich?

StackOverflow https://stackoverflow.com/questions/813294

  •  03-07-2019
  •  | 
  •  

Frage

ich ein Modell habe (Anzeigen), die gehört zu einem paar verschiedenen Modellen hat, würde Ich mag alle dieses Modell finden, wo es Modells (Openhouses) einen Zustand in engen Zusammenhang steht. Die ‚hat, gehört zu‘ sind Setup in den Modelldateien. Anzeigen hasMany Openhouses und Openhouses gehören zu Anzeigen. (Und Listings hat viele und blongs zu einigen anderen Modellen, bei denen ich die Daten wollen.)

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 nach oben!). Ich kann ein paar mehr Codebeispiele veröffentlichen, wenn nötig.

Meine Frage ist im Grunde tun, ich muss nur das Openhouse Modell abfragen und mit ihr leben oder ist meine Syntax für Bedingungen auf ähnliche Modelle falsch setzen?

War es hilfreich?

Lösung

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'))
        )
    )
)

Andere Tipps

Wenn Sie eine Menge verlinkter Modelle, Einstellungen rekursiv 2 könnte mehr Daten bringen, als Sie vielleicht.

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

$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')
    )
);

Versuchen Sie das Hinzufügen einer $this->Listing->recursive = 2; vor dem Aufruf alle zu finden. Das sollte verknüpfen die Tabellen vor dem Aufruf geben Sie den Zugriff auf das Openhouse-Modell aus dem Listing Modell.

$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')
                      )
                             )
)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top