2015-02-25 2 views
0

J'essaie d'utiliser des méthodes d'Active Record pour mettre à jour une table et marquer une tâche comme terminée comme ceci:CodeIgniter méthode Active Record enchaînant avec la mise à jour ne fonctionne pas

$this->db->update('tasks', array('status' => 'complete')) 
      ->where('id', $task_id); 

Mais il me donne une erreur:

Call to a member function where() on a non-object 

Y at-il quelque chose de mal ici que je ne peux pas voir ici? ou est-ce que le chaînage de méthode ne fonctionne pas avec la mise à jour? Les documents sont assez minces sur le chainage des méthodes ..

Il ne fonctionne que si je le casse en deux lignes ...

$this->db->where('id', $task_id); 
$this->db->update('tasks', array('status' => 'complete')); 

mais ne doivent pas enchaînant méthode de travail ici?

version PHP: 5.5.4 version CI: 3

Répondre

0

a trouvé la réponse. Update() et insert() s'exécutent lorsque la méthode est appelée, il n'y a donc rien à chaîner car l'objet db n'est pas retourné.

La bonne façon de la chaîne cette instruction d'insertion est de les inverser:

$this->db->where('id', $task_id)->update('tasks', array('status' => 'complete')); 

Ou utiliser le 3ème paramètre option sur la fonction de mise à jour:

$this->db->->update('tasks', array('status' => 'complete'), array('id', $task_id)); 

Hope this helps quelqu'un d'autre. Crédit à la communauté CI au http://forum.codeigniter.com/thread-1281-post-5822.html