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