Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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 :
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 :
$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
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
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
Pages: 1