Question

J'utilise Phalcon PHP comme PHP MVC Framework avec MongoDB.Je peux trouver un objet selon certains critères :

$user = User::findFirst(array(array('username' => $login, 'email'=> $login)));

Comme vous pouvez le constater, cette demande me renverra le dossier selon la logique AND opérateur entre les conditions.Je dois former une demande qui renverra le résultat selon OR opérateur entre les conditions.

Le problème est aussi que j'utilise MongoDB, donc, comme je peux le supposer, je ne peux pas écrire PHQL demande manuellement.

Était-ce utile?

La solution

Juste une question de modifier les tableaux PHP

$user = User::findFirst( array( 
    '$or' => array(
        array( 'username' => $login),
        array( 'email' => $login)
    )
 ));

Donc, non seulement je montre la réponse, mais aussi comment mon esprit de totaux non PHP résout ce problème :

$result = '{ "$or": [ { "username": "login" }, { "email": "login" } ] }';
echo var_dump( json_decode( $result ) );

$test = array( 
    '$or' => array(
         array( 'username' => 'login'), array( 'email' => 'login')
     )
);

echo json_encode( $test ) ."\n"

Ainsi, en quelques lignes seulement, nous avons converti et prouvé.Donc, puisque vous connaissiez le JSON grâce à la page de manuel ou en lisant une autre question sur SO, convertissez-le simplement.Et c'est l'une des raisons pour lesquelles je soumets le JSON valide dans les réponses ici, c'est pour que la logique puisse être traduite dans à peu près n'importe quelle implémentation de langage.

Autres conseils

Vous pouvez transmettre les noms de colonnes sous forme de chaîne dans le premier paramètre :

$user = User::findFirst('username = "'.$login.'" OR email = "'.$login.'"');
$result = '{ "$or": [ { "username": "login" }, { "email": "login" } ] }';
User::findFirst(array(json_decode($query,true)));

$result est le json exact qui peut être utilisé pour déclencher des requêtes dans la ligne de commande mongodb

json_decode avec le 2ème paramètre true affichera le format de style de tableau de JSON

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