Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 25-09-2008 18:38:20

_Raynor_
Membre
Date d'inscription: 11-09-2008
Messages: 28

[Zend_Db][1.6.1]Obtenir la primary key d'un Zend_Db_Table_Row_Abstract

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 ?

Code:

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)

Code:

$tableInfo = $row->_getTable()->info();
$pk = (array) $tableInfo['primary'];

Dernière modification par _Raynor_ (25-09-2008 18:44:54)

Hors ligne

 

#2 25-09-2008 22:38:00

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Zend_Db][1.6.1]Obtenir la primary key d'un Zend_Db_Table_Row_Abstract

Hello,

Tu peux faire :

Code:

$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)


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 26-09-2008 15:03:49

_Raynor_
Membre
Date d'inscription: 11-09-2008
Messages: 28

Re: [Zend_Db][1.6.1]Obtenir la primary key d'un Zend_Db_Table_Row_Abstract

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

 

#4 29-09-2008 10:12:08

julz
Membre
Date d'inscription: 19-07-2007
Messages: 33

Re: [Zend_Db][1.6.1]Obtenir la primary key d'un Zend_Db_Table_Row_Abstract

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

Code:

 
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

 

#5 29-09-2008 11:13:15

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_Db][1.6.1]Obtenir la primary key d'un Zend_Db_Table_Row_Abstract

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 pratique

Code:

 
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

 

#6 29-09-2008 12:28:58

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: [Zend_Db][1.6.1]Obtenir la primary key d'un Zend_Db_Table_Row_Abstract

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 pratique

Code:

 
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:

Code:

function getPrimaryKey()
{
      return $this->_getPrimaryKey(TRUE);
}

puisqu'il y a du traitement de fait dans _getPrimaryKey().

Hors ligne

 

#7 30-09-2008 09:31:36

julz
Membre
Date d'inscription: 19-07-2007
Messages: 33

Re: [Zend_Db][1.6.1]Obtenir la primary key d'un Zend_Db_Table_Row_Abstract

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

 

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