Question

J'utilise Doctrine, un ORM PHP. J'ai créé une requête Doctrine, et je besoin d'un contrôle. J'ai donc commencé à utiliser les méthodes de ->andWhere(...) pour ajouter de nouvelles clauses où. Cependant, je dois faire une sous-requête basée sur une autre table, comme suit:

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

ne fonctionne pas au-dessus. Cependant, il n'y a pas de classe Doctrine pour other_table, et la doctrine continue à essayer de charger le fichier other_file.php. Je l'ai compris qu'il interprète cela comme DQL (droit?). Est-il someway je peux dire la doctrine de ne pas interpréter cela comme DQL, de sorte que je peux utiliser SQL brut?

Je sais que je pourrais utiliser Doctrine_RawSql, mais cela impliquerait la réécriture toute cette requête. Ce serait bien s'il y avait une maison à mi-chemin.

Était-ce utile?

La solution

Malheureusement 1.x Doctrine, il est impossible de le faire, même en utilisant RawSql.

Toutes les requêtes RawSql exigent que chaque table sélectionnée être mis en correspondance avec un « composant », ce qui est vraiment une classe Doctrine_Record.

Vous pourriez être mieux servis en ajoutant une classe pour cette autre table, même si elle est stupidement simple et n'a jamais utilisé nulle part ailleurs.

Dans le cas contraire, vous devrez déposer à l'aide de PDO brut:

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

Voir Doctrine_RawSql

Autres conseils

Même si être capable de faire ce genre de chose (c.-à-usings tables DB qui ne sont pas mis en correspondance avec une classe Doctrine, et en utilisant-SQL pur cru) , je ne pense pas qu'il soit possible 1.x doctrine

Peut-être avec Doctrine 2.0 - qui est annoncé pour la fin de cette année ... Ce qui est pas bientôt ^^

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top