Ajudinha Na Consulta

Olá Pessoal,

Eu tenho uma tabela de Obras e Fotos, o caso é que quero filtrar somente as Obras que tenham fotos cadastradas.

Alguém poderia me ajuda tem como fazem isso no findAll.

Agradeço.

Edson,

As Fotos estão cadastradas na mesma tabela, ou em outra tabela?

Se for na mesma tabela é fácil, usa-se o ‘condition’ e ‘params’ dentro do findAll().

Se estiver em outra tabela, vai precisar criar uma relacionamento no seu model, e usar a função with(), assim ele retorna somente as Obras que conter fotos.

Blz Newerton,

Então estou fazendo isso


'obras'=>  Obra::model()->with('fotos')->findAll(array('condition'=>'t.status = 1','order'=>'rand()')),

Tem uma tabela fotos onde gravo as fotos da obra.

no model obra tem uma relação foto:


'fotos' => array(self::HAS_MANY, 'Foto', 'idobra'),

Só que continua retornando obra sem foto…onde eu corrijo isso.

Valew

Edson,

Sabe a quantidade de Obras com fotos?

Faz um teste assim


$model = Obra::model()->with('fotos')->findAll(array('condition'=>'t.status = 1','order'=>'rand()'));

echo count($model);

Se contabilizar as obras sem fotos, adicionar together no relacionamento.


'fotos' => array(self::HAS_MANY, 'Foto', 'idobra', 'together' => true),

Então tem 14 obras cadastras no total e 1 obra sem fotos cadastradas, e quando eu dou o count retorna 14.

Sendo que o correto neste caso deveria retornar 13.

Fiz o que falou, coloquei together no relacionamento mas continua retornando as 14.

o que será que esta errado?

valew…

Tenta usar isso:





$criteria=new CDbCriteria;

$criteria->compare('status',1);

$criteria->together = true;

$criteria->with = array(

	'fotos'=>array('joinType'=>'INNER JOIN'),

);


$model = Obra::model()->findAll($criteria);

echo count($model);




Edson,

Verifica no banco de dados se tem alguma tupla para a Obra que não contêm imagem.

Que tipo de campo é o status? int, set, enum?

Resolvido obrigado

Qual era o problema?