Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [Résolu] DAO: accéder à un champ d'un record le supprime

Posted by Mathieu147 on 11/10/2009 17:25

Bonjour,

Mon titre est un peu bizarre mais mon problème aussi donc je savais pas quoi mettre :-D

J'ai un module nommé pages qui gère les pages de mon site, avec un formulaire pour mettre à jour les texte (un bête CRUD, quoi). J'ai surchargé la méthode _afterUpdate() parce que j'aimerais faire certains traitement sur mon texte.

Par exemple si je fais ça, ça fonctionne:

 protected function _afterUpdate($form, $id, $resp) {
   $daoFactory = jDao::get('pages~pages');
   $page = $daoFactory->get($id);
   $page->contents = "<p>Tralala</p>";
   $daoFactory->update($page);
 }

le champ contents de ma page est bien remplacé par un paragraphe qui contient Tralala.

Par contre, si je fais ça, ça ne fonctionne pas:

 protected function _afterUpdate($form, $id, $resp) {
   $daoFactory = jDao::get('pages~pages');
   $page = $daoFactory->get($id);
   $page->contents = $page->contents + "<p>Tralala</p>";
   $daoFactory->update($page);
 }

parce que le champ contents de ma page, après, vaut seulement 0!

Si je passe par une variable intermédiaire comme ça, ça ne fonctionne pas non plus:

 protected function _afterUpdate($form, $id, $resp) {
   $daoFactory = jDao::get('pages~pages');
   $page = $daoFactory->get($id);
   $oldContents = $page->contents;
   $newContents = $oldcontents + "<p>Tralala</p>";
   $page->contents = $newContents;
   $daoFactory->update($page);
 }

Toujours pareil, contents vaut 0.

Comment est-ce que ça se fait??

Merci!

  [Opened] Re: DAO: accéder à un champ d'un record le supprime

Reply #1 Posted by peter on 11/10/2009 23:19

peut être avec un

 $page->contents = $page->contents."<p>Tralala</p>";

http://www.petermeuel.com

  [Opened] Re: DAO: accéder à un champ d'un record le supprime

Reply #2 Posted by Mathieu147 on 11/11/2009 11:15

Ah ben ça c'est bizarre mais ça marche! Qu'y a-t-il de différent entre les opérateurs + et . pour concaténer des chaînes?

En fait tant mieux si ça fonctionne mais ça ne m'arrange pas parce que le traitement que je voudrais faire ne consiste pas que à ajouter un paragraphe à la fin, je voudrais modifier comme j'ai envie un champ de mon record et je n'y parviens pas...

  [Opened] Re: DAO: accéder à un champ d'un record le supprime

Reply #3 Posted by bballizlife on 11/11/2009 11:45

En php la concaténation se fait avec "." et non avec "+" qui est le sigle de l'addition. En voulant additionner (donc avec "+") deux chaines de caractères, php renvoie logiquement 0.

Comme l'a donc dit Peter, il faut que tu utilise une concaténation avec ".". C'est ici un problème de connaissance de php qui t'a fait défaut ;)


N'importe comment c'est dans la doc

  [Opened] Re: DAO: accéder à un champ d'un record le supprime

Reply #4 Posted by laurentj on 11/12/2009 00:28

Salut,

Un truc me chiffone dans ta manière de faire. Si j'ai bien compris, ton crud travaille sur le dao "pages~pages". ça veut dire alors que lors d'un update, avec ta méthode, l'enregistrement est mis à jour deux fois de suite. ça fait une requete de trop.

Si tu veux modifier toi même l'enregistrement qui vient d'être édité, redefini plutôt la méthode _beforeSaveUpdate : tu y reçois directement le record, qui sera ensuite automatiquement sauvegardé

    protected function _beforeSaveUpdate($form, $form_daorec, $id) {
      $form_daorec->content .= "<p>Tralala</p>";
    }

Si par contre ton crud n'est pas dédié à "pages~pages", oublie ce que j'ai dit.

Tu noteras au passage l'opérateur .=, qui permet de faire l'équivalent ici de

  $form_daorec->content = $form_daorec->content ."<p>Tralala</p>";
;-)

  [Opened] Re: DAO: accéder à un champ d'un record le supprime

Reply #5 Posted by Mathieu147 on 11/12/2009 10:37

Quelle andouille je fais avec mes «+» et mes «.»! Je le sais en plus que ça marche comme ça, mais je m'embrouille parce que je viens de me mettre au Javascript et qu'en Javascript on peut concaténer avec des «+».

En fait je n'ai plus besoin de faire de traitement sur mon texte parce que j'ai décidé de m'y prendre autrement, mais merci quand-même pour les explications.

Je voulais effectivement modifier un record de pages~pages.

En fait au départ j'ai voulu modifier _beforeSaveUpdate() à la place de _afterUpdate() puis je sais pas trop ce que j'ai foutu, je crois que j'étais pas en forme à ce moment là :-D

 
Page
  1. Re: DAO: accéder à un champ d'un record le supprime