Domanda

sto usando Doctrine, un ORM PHP. Ho creato una Query di Doctrine, e ho bisogno di un maggiore controllo. Così ho iniziato a utilizzare i metodi ->andWhere(...) per aggiungere nuove clausole WHERE. Tuttavia ho bisogno di fare una sottoquery basato su un altro tavolo, in questo modo:

$query->andWhere("id in (SELECT id from other_table where value = ?)", $myvar);

È possibile che questo non funziona. Tuttavia non v'è nessuna classe Dottrina per other_table, e la dottrina continua a cercare di caricare il file other_file.php. Ho capito che interpreta questo come DQL (giusto?). C'è qualche modo posso dire dottrina di non interpretare questo come DQL, in modo che io posso solo usare SQL prime?

So che potrei usare Doctrine_RawSql, ma che comporterebbe riscrivere tutto di questa query. Sarebbe bello se ci fosse una via di mezzo.

È stato utile?

Soluzione

Purtroppo con Dottrina 1.x non è possibile fare questo, anche utilizzando RawSql.

Tutte le query RawSql richiedere che ogni tabella selezionata essere associata a una 'componente', che è davvero una classe Doctrine_Record.

Si potrebbe essere meglio servita l'aggiunta di una classe per che altro tavolo, anche se è stupidamente semplice e mai usato in qualsiasi altro luogo.

In caso contrario, si dovrà scendere a DOP grezzo usando:

$dbh = Doctrine_Manager::connection()->getDbh();

Doctrine_RawSql

Altri suggerimenti

Anche se essere in grado di fare questo genere di cose (cioè usings tabelle DB che non sono mappati a una classe Dottrina e utilizzando puro-raw-SQL) , non credo che sia possibile con Dottrina 1.x

Forse con Dottrina 2.0 - che si annuncia per la fine di questo anno ... che non è presto ^^

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top