O sistema de montagem de consultas do Yii é prático e conveniente, mas não tem jeito, uma alternativa assim nunca poderá cobrir todas possíbilidades de complexidade de SQL.
Bem… preciso fazer uma consulta que utiliza duas sub-consultas, entre outras complexidades.
Gostaria de saber como introduzir o SQL ‘tradicional’ na consulta do Yii (num model).
O SQL é este abaixo.
Se alguém me explicar como converte-lo para o modo de consultas do Yii, pode ser também.
Não tenho preconceito quanto ao tipo de solução.
SELECT Fantasia, DATA
FROM (
SELECT Fantasia, Data_Cadastro, DT, DV
,CASE WHEN ((DT IS NULL) AND (DV IS NULL))
THEN Data_Cadastro
ELSE CASE WHEN (DV IS NULL) OR (DT > DV) THEN DT ELSE DV END
END DATA
FROM cadastro
LEFT JOIN
(
SELECT Cod_Conta, MAX(Data_Cadastro) DT
FROM tarefa
WHERE Cod_Vendedor = 439
GROUP BY Cod_Conta
) TF ON TF.Cod_Conta = cadastro.Cod_Cadastro
LEFT JOIN
(
SELECT Cod_Conta, MAX(Data_Cadastro) DV
FROM contato_visita
WHERE Cod_Vendedor = 439
GROUP BY Cod_Conta
) V ON V.Cod_Conta = cadastro.Cod_Cadastro
WHERE StatusConta = 'Em Andamento'
AND Cod_Vendedor = 439
AND Data_Expirou IS NULL
) X
WHERE X.Data < (CURDATE()-10)
ORDER BY DATA
Essa consulta mostra registros que não foram atualizados nos últimos 10 dias
E a atualização pode ser realizada em tres tabelas diferentes.
O método query() citado acima vai retornar um objeto CDbDataReader, que pode ser usado num loop:
foreach ($result as $row) {
echo $row['column_name'];
}
Mas caso queira trabalhar com seus próprios objetos, pode fazer algo como:
$q = 'SELECT * FROM table_name WHERE id=1';
$cmd = Yii::app()->db->createCommand($q);
$cmd->setFetchMode(PDO::FETCH_CLASS, 'Model_name');
$model = $cmd->queryRow();
// Use $model->attribute_name para acessar os valores retornados
Note a diferença em usar o método query() e queryRow(). Este último é usado quando se faz uma consulta ao banco de dados para retornar apenas um registro.
[quote="Ednei"]Note a diferença em usar o método query() e queryRow(). Este último é usado quando se faz uma consulta ao banco de dados para retornar apenas um registro.
[/quote]
Obrigado Ednei
Eu gostaria de retornar a informação se for possível, utilizando o tipo de dados "[color="#FF0000"]CActiveDataProvider[/color]"
Que é o tipo de dados que é utilizado com o "bootstrap.widgets.TbGridView"
Como nesta linha => ‘dataProvider’=>$tarefaModel->proximas_tarefas(),
Aqui o trecho de código da função proximas_tarefas, que retorna a informação