En cakephp, ¿cómo puedo hacer una búsqueda con condiciones en un campo relacionado?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo un modelo (Listados) que tiene y pertenece a algunos modelos diferentes, me gustaría encontrar todo este modelo en el que su modelo relacionado (Openhouses) tenga una condición. Los 'tiene y pertenecen a' están configurados en los archivos modelo. Los listados hasmany Openhouses y Openhouses pertenecen a los listados. (Y los listados tienen muchos y fallan en algunos otros modelos donde quiero los datos).

Lo he estado intentando.

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

pero en vano.

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

Sé que puedo buscar en el modelo de Openhouse y obtener listados relacionados, pero luego los datos se devuelven en un formato diferente y debo aumentar la recursión para obtener datos de mis otros modelos. (Y termino con datos de Openhouse duplicados). Puedo publicar algunos ejemplos de código más si es necesario.

Mi pregunta es, básicamente, ¿necesito simplemente consultar el modelo de Openhouse y vivir con él o mi sintaxis para poner condiciones en modelos relacionados es incorrecta?

¿Fue útil?

Solución

Prueba esto:

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

Otros consejos

Si tienes muchos modelos vinculados, la configuración recursiva a 2 podría traer más datos de los que podrías desear.

Si eso es cierto, hay una alternativa a lo que dijo mavarro, también puede intentar usar el Comportamiento sostenible :

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

Intenta agregar un $ this- > Listing- > recursive = 2; Antes de la llamada para encontrar todo. Ese debería vincular las tablas antes de la llamada que le da acceso al modelo Openhouse desde el modelo de listado.

$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')
                      )
                             )
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top