edgardmessias / yii2-ibm-db2

This extension adds IBM DB2 database engine extension for the Yii framework 2.0.
Other
7 stars 6 forks source link

Quoting incorreto #7

Closed bpbastos closed 7 years ago

bpbastos commented 7 years ago

Oi @edgardmessias, estamos com o seguinte problema:

Em algumas consultas utilizamos os métodos joinWith (yii\db\ActiveQuery) e join (yii\db\Query) porém quando utilizamos o método join() a expressão da cláusula ON (e.horario_coordenador_id=h.id) não está ficando entre "quotes" e gera um erro no DB2 ao executar a consulta.

Exemplo:

Inscricao::find() ->joinWith(['candidato c']) ->joinWith(['entrevistas e']) ->join('INNER JOIN', 'inscricao_horario_coordenador h', 'e.horario_coordenador_id=h.id');

Resultado:

SELECT "inscricao_inscricao".* FROM "inscricao_inscricao" LEFT JOIN "inscricao_candidato" "c" ON "inscricao_inscricao"."candidato_id" = "c"."id" LEFT JOIN "inscricao_entrevista" "e" ON "inscricao_inscricao"."id" = "e"."inscricao_id" INNER JOIN "inscricao_horario_coordenador" "h" ON e.horario_coordenador_id=h.id

edgardmessias commented 7 years ago

Olá @bpbastos, você pode testar isso: ->join('INNER JOIN', 'inscricao_horario_coordenador h', '{{e}}.[[horario_coordenador_id]]={{h}}.[[id]]')

edgardmessias commented 7 years ago

@bpbastos , como você pode ver aqui: https://github.com/yiisoft/yii2/blob/master/framework/db/QueryBuilder.php#L1063

Se a condição não for Expression ou array, ele retorna do jeito que está.

Por isso que é sempre bom colocar {{tabela}} e [[coluna]] para comparar colunas.

Esse problema só ocorreu por causa do método join, que é instrução simples, e não faz parte do ActiveRecord.

bpbastos commented 7 years ago

Oi @edgardmessias desculpa a demora, usando o Expression como voce sugeriu resolveu o problema. Obrigado!