2010-06-07 7 views
3

J'ai une table nommée ChatSessions où je garde une trace des utilisateurs actifs dans le salon de discussion. J'ai besoin d'élaguer les sessions utilisateur expirées de la table toutes les 10 minutes. Utiliser php-mysql pur est simple, mais je ne sais absolument pas comment le convertir en ActiveRecord dans CodeIgniter. La plaine requête SQL est ci-dessous:Comment supprimer des enregistrements en utilisant ActiveRecord avec la fonction mySQL en tant que condition WHERE

SELECT * 
FROM `ChatSessions` 
WHERE `SessionExpires` < DATE_SUB(NOW() , INTERVAL 10 MINUTE) 

Quelqu'un peut-il me dire quel est le code équivalent en utilisant CodeIgniter ActiveRecord?

Répondre

4

Le code suivant devrait le faire:

// You can use custom strings in the where() function 
$where = "SessionExpires < DATE_SUB(NOW() , INTERVAL 10 MINUTE)"; 
// although you may need to set the third parameter to FALSE in order to stop CI from protecting your fields. 
$this->db->where($where, null, false); 
$this->db->delete('ChatSessions'); 

Vous pouvez également essayer les éléments suivants (mais je ne sais pas si cela va fonctionner):

$where_condition = "DATE_SUB(NOW() , INTERVAL 10 MINUTE)"; 
$this->db->where("SessionExpires <", $where_condition, false); 
$this->db->delete('ChatSessions'); 
+0

Je ne pense pas ActiveRecord permet des fonctions sur les conditions WHERE, la même raison pour laquelle nous devons utiliser set ($ field, $ value) pour Select() –

+0

Le guide de l'utilisateur donne cet exemple: $ this-> db-> where ('MATCH (field) AGAINST ("valeur")', NULL, FALSE); – Kurucu

2

La conversion en ActiveRecord si vous avez déjà le SQL semble être une perte de temps. Je voudrais juste exécuter le SQL directement.

$sql = "DELETE FROM ChatSessions 
     WHERE SessionExpires < DATE_SUB(NOW() , INTERVAL 10 MINUTE)"; 
$this->db->query($sql); 
+0

Merci pour la réponse . Oui, ça m'a traversé l'esprit mais j'essayais de m'éloigner des requêtes "directes" pour conserver une certaine cohérence sur mon code. Je n'ai toujours pas encore compris comment faire avec ActiveRecord. –

Questions connexes