Dans Cakephp, comment puis-je effectuer une recherche avec des conditions sur un domaine connexe?

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai un modèle (Listings) qui appartient à quelques modèles différents. J'aimerais trouver l'ensemble de ce modèle dont le modèle associé (Openhouses) a une condition. Les 'a et appartient à' sont configurés dans les fichiers de modèle. Annonces hasmany Openhouses et Openhouses appartiennent à Listings. (Et les listes ont beaucoup et blongs à quelques autres modèles où je veux les données.)

J'ai essayé.

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

mais en vain.

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

Je sais que je peux effectuer une recherche sur le modèle Openhouse et obtenir des listes associées, mais les données sont ensuite renvoyées dans un format différent et je dois augmenter la récursivité pour obtenir les données de mes autres modèles. (Et je me retrouve avec des données Openhouse en double!). Je peux poster d'autres exemples de code si nécessaire.

Ma question est la suivante: dois-je simplement interroger le modèle d'open house et vivre avec ce dernier ou ma syntaxe pour imposer des conditions aux modèles associés est-elle incorrecte?

Était-ce utile?

La solution

Essayez ceci:

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

Autres conseils

Si vous avez beaucoup de modèles liés, les paramètres récursifs sur 2 peuvent apporter plus de données que souhaité.

Si cela est vrai, il existe une alternative à ce que dit mavarro. Vous pouvez également essayer d'utiliser Comportement pouvant être contenu :

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

Essayez d’ajouter un $ this- > Listing- > recursive = 2; avant l'appel pour tout trouver. Cela devrait relier les tables avant l'appel, ce qui vous permettra d'accéder au modèle Openhouse à partir du modèle Listing.

$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')
                      )
                             )
)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top