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.

Foi útil?

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 ^^

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top