Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Comment obtenir la valeur de la primary key à partir d'une instance de Zend_Db_Table_Row_Abstract ?
Imaginons que j'ai une méthode getMachinOuChose() qui retourne une Zend_Db_Table_Row_Abstract provenant des "tables" Machins ou de Choses (des Zend_Db_Table)
Je désire obtenir la valeur de la primary key de $row. Or dans la table Machins, c'est la colonne M_ID et dans la table Choses, c'est la colonne C_ID.
N'y a-t-il pas d'autre moyen que de faire comme suit ?
if ($row instanceof Machins) { $pk = $row->M_ID; } else { $pk = $row->C_ID; }
J'ai vu qu'il existait une méthode Zend_Db_Table_Row_Abstract::_getPrimaryKey(bool $useDirty) mais elle n'est pas publique !?!
Même ce qui suit semble un peu trop "long" (et surtout doublon)
$tableInfo = $row->_getTable()->info(); $pk = (array) $tableInfo['primary'];
Dernière modification par _Raynor_ (25-09-2008 18:44:54)
Hors ligne
Hello,
Tu peux faire :
$pk = $row->_getTable()->info(Zend_Db_Table_Abstract::PRIMARY); // ou $pk = $row->_getTable()->info('primary');
Le cast array n'est pas nécessaire.
Ceci te permet de connaître les colonnes de la clé primaire.
A+
Dernière modification par mikaelkael (25-09-2008 22:44:02)
Hors ligne
OK mais ça reste "moche" car redondant non ?
Et pour le cast, je l'ai pris directement du constructeur de Zend_Db_Table_Row_Abstract
Hors ligne
Salut,
pourquoi ne pas étendre Zend_Db_Table_Row_Abstract et ajouter une méthode getPrimaryKey ?
C'est ce que j'ai fais, c'est bien pratique
function getPrimaryKey() { return $this->_primary; }
C'est ce que j'ai fais pour le nom de la table c'est bien pratique, et si cela évolue par la suite, on ne modifie qu'à un seul endroit
J'espère que ça aidera,
Bonne journée
Hors ligne
julz a écrit:
Salut,
pourquoi ne pas étendre Zend_Db_Table_Row_Abstract et ajouter une méthode getPrimaryKey ?
C'est ce que j'ai fais, c'est bien pratiqueCode:
function getPrimaryKey() { return $this->_primary; }C'est ce que j'ai fais pour le nom de la table c'est bien pratique, et si cela évolue par la suite, on ne modifie qu'à un seul endroit
J'espère que ça aidera,
Bonne journée
oui c'est une bonne approche mais il faut penser à positionner le rowClassName des table pour en bénéficier. le plus simple étant d'aussi surcharger la classe Zend_Db_Table pour le faire de façon automatique.
Ainsi toute amélioration à apporter au fonctionnement des Table et Row seront concentré dans ces deux classe sans avoir à revenir sur le code de l'appli
A+JYT
Hors ligne
julz a écrit:
Salut,
pourquoi ne pas étendre Zend_Db_Table_Row_Abstract et ajouter une méthode getPrimaryKey ?
C'est ce que j'ai fais, c'est bien pratiqueCode:
function getPrimaryKey() { return $this->_primary; }C'est ce que j'ai fais pour le nom de la table c'est bien pratique, et si cela évolue par la suite, on ne modifie qu'à un seul endroit
J'espère que ça aidera,
Bonne journée
Je crois qu'il est quand même préférable de faire:
function getPrimaryKey() { return $this->_getPrimaryKey(TRUE); }
puisqu'il y a du traitement de fait dans _getPrimaryKey().
Hors ligne
rebonjour,
le boolean est déjà à true par défaut mais ca ne fait pas de mal si on veut changer en effet .
L'intérêt du boolean 'dirty ' est de pouvoir récupérer la valeur les valeurs de "base" ou après "changement" du row par l'utilisateur (par défaut)
A plus
Hors ligne
Pages: 1