2017-02-17 1 views
0

J'ai user_messages table avec des colonnes id, sender_id, receiver_id, message, deletedORM générateur de requêtes pour connaître l'état complexe dans CakePHP

Je dois récupérer tous les messages comme celui-ci

SELECT * 
FROM 
    user_messages UserMessages 
WHERE (
    UserMessages.deleted = false 
    AND (
     (sender_id = $loggedin_user_id AND receiver_id = $user_id) 
     OR 
     (sender_id = $user_id AND receiver_id = $loggedin_user_id) 
    ) 
ORDER BY 
    created DESC 

Actuellement, je suis en utilisant ce générateur de requêtes

$message_by_list = $this->UserMessages->find() 
    ->where(['UserMessages.deleted' => false]) 
    ->andWhere(function ($exp) { 
     return $exp->or_([ 
      'sender_id' => $this->Auth->user('id'), 
      'receiver_id' => $this->Auth->user('id') 
     ]); 
    }) 

qui génère la requête SQL comme

FROM 
    user_messages UserMessages 
WHERE 
    (UserMessages.deleted = false AND (sender_id = $loggedin_user_id OR receiver_id = $loggedin_user_id)) 
ORDER BY 
    created DESC 

Comment écrire une requête ORM optimisée pour récupérer des données comme ci-dessus?

Edit 2: requête Mise à jour pour la réponse de Arilia

WHERE (
     (
      UserMessages.deleted = false 
     ) 
     AND 
     (
      (
       UserMessages.sender_id = $loggedin_user_id 
       AND 
       UserMessages.receiver_id = $user_id 
      ) 
      OR 
      UserMessages.sender_id = $user_id 
      OR       /// doubt here 
      UserMessages.receiver_id = $loggedin_user_id 
     ) 
    ) 
+0

est Edit2 la requête que vous souhaitez obtenir ou la requête générée par mon code? Parce que je reçois un ET où vous mettez 'doute ici', pas un OU – arilia

+0

C'est la requête générée par votre code – Gaurav

Répondre

0

essayer cette

$message_by_list = $this->UserMessages->find() 
    ->where(['sender_id' => $user_id, 'receiver_id' => $logged_user_id]) 
    ->orWhere(['sender_id' => $logged_user_id, 'receiver_id' => $user_id]) 
    ->andWhere(['UserMessages.deleted' => false]); 
+0

J'ai un doute dans la requête générée. Vérifiez la présence de '/// doute ici 'dans le code mis à jour. Je pense qu'il va chercher des enregistrements correspondant à une seule colonne – Gaurav