Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-03-2008 09:26:13

Peggy
Membre
Date d'inscription: 11-02-2008
Messages: 25
Site web

[Zend_Db][1.5]Pb update sur une table avec une clé primaire composée

Bonjour,

j'ai un problème bien mystérieux pour moi...
Je n'arrive pas à faire un update sur une table qui contient une clé primaire composée ...
voilà ma table avec les classes associées :

Code:

create table qst_questions_users (
    qr_que_id int unsigned not null,
    qr_usr_id_createur int unsigned not null,
    qr_usr_id_conseiller int unsigned not null,
    qr_value int not null,
    primary key (qr_que_id, qr_usr_id_createur),
    foreign key (qr_que_id) references que_question( que_id ),
    foreign key (qr_usr_id_createur) references qst_users( usr_id ),
        foreign key (qr_usr_id_conseiller) references qst_users( usr_id )    
);

class QuestionUser extends Zend_Db_Table_Row_Abstract
{
    public $_error;
    
    public function save() {
        $qstusr = new QuestionsUsers();
        $select = $qstusr->select()->where('qr_que_id = ?', $this->qr_que_id)
                            ->where('qr_usr_id_createur = ?',$this->qr_usr_id_createur);
        $res = $qstusr->fetchAll($select);
        if(count($res)==1){
            return $this->_doUpdate();
        }elseif(count($res)==0){
            return $this->_doInsert();
        }else{
            $this->_error ="un problème est survenu, veuillez réessayer";
            return false;
        }
        return false;
    }

    public function update() {
        return $this->_doUpdate();
    }
    
}

class QuestionsUsers extends Zend_Db_Table_Abstract
{
    protected $_name = 'qst_questions_users';
    protected $_rowClass = 'QuestionUser';
    
    protected $_referenceMap    = array(
        'Question' => array(
            'columns'           => 'qr_que_id',
            'refTableClass'     => 'Questions',
            'refColumns'        => 'que_id',
            'onDelete'          => self::CASCADE,
            'onUpdate'          => self::RESTRICT
        ),
        'Conseiller' => array(
            'columns'           => 'qr_usr_id_conseiller',
            'refTableClass'     => 'Accounts',
            'refColumns'        => 'usr_id',
            'onDelete'          => self::CASCADE,
            'onUpdate'          => self::RESTRICT
        ),
        'Createur' => array(
            'columns'           => 'qr_usr_id_createur',
            'refTableClass'     => 'Accounts',
            'refColumns'        => 'usr_id',
            'onDelete'          => self::CASCADE,
            'onUpdate'          => self::RESTRICT
        )
    );
    
    /**
    * Création d'un nouvel enregistrement asocié à la table.
    *
    * @param StdClass|array $obj OPTIONAL object to cast
    * @return Fast_Db_Row
    */
    public function createRowQuestionUser($obj = null) {
      if ($obj)
      {
         if (is_object($obj))
            $obj = get_object_vars($obj);
         $row = $this->createRow($obj);
      } else {
         $row = $this->createRow();
      }
      return $row;
   }
}

Et voilà le bout de code de mon controller :

Code:

$qur = new QuestionsUsers();
$response = $qur->createRowQuestionUser();

$response->qr_usr_id_createur = $cache->load('createur');
$response->qr_usr_id_conseiller = $cache->load('conseiller');
$response->qr_que_id = $qstid;
$response->qr_value = $form->getValue('radio1');
    
$result = $response->save();

et voilà l'erreur que ca me retourne :
Uncaught exception 'Zend_Db_Table_Row_Exception' with message 'The specified Table 'QuestionsUsers' does not have the same primary key as the Row'


Avez-vous déjà rencontré ca???

Merci

Hors ligne

 

#2 11-03-2008 09:02:43

Peggy
Membre
Date d'inscription: 11-02-2008
Messages: 25
Site web

Re: [Zend_Db][1.5]Pb update sur une table avec une clé primaire composée

Personne n'a d'idées???

Est-ce quelqu'un a eu à se servir d'une table avec 2 clés primaire???

merci...

Hors ligne

 

#3 15-03-2008 00:51:30

kiminox
Membre
Date d'inscription: 15-01-2008
Messages: 37

Re: [Zend_Db][1.5]Pb update sur une table avec une clé primaire composée

il semblerait que l'identifiant de _clearData (données de l'objet au départ) n'est pas le même que l'identifiant de data (données de l'objet que tu as sélectionné en base) : il ne peut donc pas faire un update.
Il me semble que ta conception n'est pas très efficace : tu redéfinis save dans l'objet Row pour refaire ce que fait déjà la méthode save (son intérêt est qu'elle fait automatiquement un insert ou un update).
idem pour la méthode createRowQuestionUser : il existe une méthode dans la classe parente qui retourne le Row associé à la Table.
De plus, ta classe QuestionsUsers me fait plus penser à un Rowset qu'à un Table.

Yoong

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages