2009-12-17 7 views
1

J'essaie de mettre à jour un enregistrement en utilisant la bibliothèque ORM intégrée à Kohana 2.3.4. Je modifie fondamentalement le script que j'utilise pour insérer l'enregistrement en premier lieu. Mon problème est que l'enregistrement est à nouveau inséré, pas mis à jour. Voici mon script:Kohana 2.3.4 Mise à jour ORM question

 public function edit($id) 
     { 
      // Find the selected blog entry 
      $blog = ORM::factory('article')->where('id',$id)->find(); 

      //other code to view data from $blog 

      // Write the changes to the db for this id 
      $title = $this->input->post('title'); 
      $content = $this->input->post('text_content'); 

      if(!empty($title) && !empty($content)) 
       { 

      $edit_blog = ORM::factory('article')->where('id',$id); 
      $edit_blog->title = $title; 
      $edit_blog->content = $content; 

      if($edit_blog->save()) 
       { 
        url::redirect('admin/dashboard/blog/manage'); 
       } 
       } 

J'ai parcouru la documentation fournie par Kohana, mais je ne trouve pas d'exemple de mise à jour des enregistrements. Je pensais que l'argument $ id passé à la méthode d'édition sélectionnerait un enregistrement qui existe déjà et le mettrait à jour, mais il en insèrerait simplement un nouveau. De l'aide? Merci!

Répondre

1

Il semble que vous ayez oublié d'ajouter la méthode find() lors de la création de votre objet $ edit_blog. Soit dit en passant, il n'y a pas besoin de créer un autre, vous pouvez réutiliser l'objet de blog que vous avez instancié en premier lieu (ici en utilisant une syntaxe raccourcir sligthly):

public function edit($id) 
      { 
        // Find the selected blog entry 
        $blog = new Article_Model($id); 

     //other code to view data from $blog 

        // Write the changes to the db for this id 
        $title = $this->input->post('title'); 
        $content = $this->input->post('text_content'); 

        if(!empty($title) && !empty($content)) 
         { 

        $blog->title = $title; 
        $blog->content = $content; 

        if($blog->save()) 
          { 
            url::redirect('admin/dashboard/blog/manage'); 
          } 
      } 

Aussi, vous devriez envisager d'utiliser la validation bibliothèque à l'intérieur de votre modèle.

Questions connexes