Doutrina - Posso usar SQL real (não DQL) em A -> e lugar ()?
-
21-09-2019 - |
Pergunta
Estou usando a doutrina, um PHP ORM. Eu criei uma consulta de doutrina e preciso de mais controle. Então eu comecei a usar o ->andWhere(...)
Métodos para adicionar novos onde cláusulas. No entanto, eu preciso fazer uma subconeração com base em outra mesa, assim:
$query->andWhere("id in (SELECT id from other_table where value = ?)", $myvar);
O acima não funciona. No entanto, não há aula de doutrina para outros_table, e a doutrina continua tentando carregar o arquivo other_file.php
. Eu descobri que está interpretando isso como DQL (certo?). Existe de alguma forma que eu possa dizer à doutrina para não interpretar isso como DQL, para que eu possa usar apenas o SQL bruto?
Eu sei que poderia usar Doctrine_RawSql
, mas isso envolveria reescrever toda essa consulta. Seria bom se houvesse uma casa de recuperação.
Solução
Infelizmente com a doutrina 1.x, não é possível fazer isso, mesmo usando o RawSQL.
Todas as consultas RawSQL exigem que cada tabela selecionada seja mapeada para um 'componente', que é realmente uma classe Doutrine_record.
Você pode ser melhor servido adicionando uma aula para essa outra tabela, mesmo que seja estupidamente simples e nunca usada em nenhum outro lugar.
Caso contrário, você terá que cair para a PDO crua usando:
$dbh = Doctrine_Manager::connection()->getDbh();
Ver Doutrina_rawsql
Outras dicas
Mesmo que seja capaz de fazer esse tipo de coisa (ou seja, tabelas de banco de dados que não são mapeadas para uma aula de doutrina e usando o rato puro-sql), Não acho que seja possível com a doutrina 1.x
Talvez com a Doutrina 2.0 - que é anunciada para o final deste ano ... que não é em breve ^^