No CakePHP como posso fazer um achado com condições em um campo relacionado?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho um modelo (Resultados) que tem e pertence a alguns modelos diferentes, eu gostaria de encontrar todos este modelo onde é modelo relacionado (Openhouses) tem uma condição. O 'tem e pertence à' são configurados nos arquivos de modelo. Listagens HasMany Openhouses e Openhouses pertencem listagens. (E listagens tem muitos e blongs a alguns outros modelos onde eu quero os dados.)

Eu tenho tentado.

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

, mas sem sucesso.

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

Eu sei que pode pesquisar no modelo Openhouse e obter resultados relacionados, mas, em seguida, os dados são retornados em um formato diferente e eu preciso para virar forma recursão-se para obter dados de meus outros modelos. (E eu acabar com dados Openhouse duplicados!). Eu posso postar alguns exemplos mais de código, se necessário.

A minha pergunta é, basicamente, eu preciso apenas consultar o modelo Openhouse e viver com ele ou é o meu sintaxe para colocar condições sobre os modelos relacionados incorreta?

Foi útil?

Solução

Tente isto:

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

Outras dicas

Se você tem um monte de modelos vinculados, configurações recursiva para 2 poderia trazer mais dados do que você pode querer.

Se isto é verdade, não é uma alternativa ao que mavarro disse, você também pode tentar usar o Containable comportamento :

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

Tente adicionar um $this->Listing->recursive = 2; antes da chamada para encontrar todos. Que deve link as tabelas antes da chamada dando-lhe acesso ao modelo Openhouse do modelo de Listagem.

$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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top