Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 15-01-2009 22:28:47

Ultimata
Membre
Date d'inscription: 15-01-2009
Messages: 31

Problèmes de récupération de données

Bonjour,

Étant en "apprentissage" d'utilisation de Zend, j'ai un petit soucis que la doc n'arrive pas à réglé :'( ...


J'arrive à récupéré et afficher facilement le contenu complet de ma BDD en utilisant
        $actu = new Actu();
        $this->view->actu = $actu->fetchAll();

Mais quand il s'agit de faire un WHERE (sur la requete SQL), en récupérant l'id en GET .. Je suis entièrement perdu (erreur sur erreurs :S ). Je n'arrives pas a trouvé les bonnes fonctions à utiliser !


Quelqu'un pourrait-il m'éclaircir sur une quête novice? sad


Merci

Hors ligne

 

#2 15-01-2009 23:03:37

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: Problèmes de récupération de données

Essaie peut être ça :

$actu = new Actu() ;

$select = $actu->select() ;
$select->where('actu = ?', $id) ;

$this->view->actu = $actu->fetchAll($select) ;


Quelques tutoriaux Zend Framework !

Hors ligne

 

#3 15-01-2009 23:09:30

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Problèmes de récupération de données

Dans ton model Actu :

public function getActuById($id)
{
    $select = $this->select()
        ->from($this->_name)
        ->where('actu_id = ?', $id)
    return $this->fetchRow($select);
}

Dans ton controlleur :

$id = $this->_getParam('id'); // on récupère l'id en GET
        $actu = new Actu();
        $this->view->actu = $actu->getActuById($id);

A lire aussi cette partie :
http://framework.zend.com/manual/fr/zend.db.select.html
Mais le mieux serait de tous lire la partie concernant Zend_Db

Edit: Arf grillé

Dernière modification par alien7 (15-01-2009 23:11:03)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#4 16-01-2009 00:07:51

Ultimata
Membre
Date d'inscription: 15-01-2009
Messages: 31

Re: Problèmes de récupération de données

Merci les gens smile
Rapide comme aide !!

Hors ligne

 

#5 16-01-2009 04:46:48

Ultimata
Membre
Date d'inscription: 15-01-2009
Messages: 31

Re: Problèmes de récupération de données

Juste pour dire si quelqu'un avais le meme problème, je rectifis une petite parse de alien7 :

public function getActuById($id)
{
    $select = $this->select()
        ->from($this->_name)
        ->where('actu_id = ?', $id);
    return $this->fetchRow($select);
}

(il manquais un ; à la ligne du where ^^).


Voila

Hors ligne

 

#6 16-01-2009 04:55:43

Ultimata
Membre
Date d'inscription: 15-01-2009
Messages: 31

Re: Problèmes de récupération de données

Une autre question ... Au niveau du display (phtml) j'affiche sa comment ? >_<

Car :

<?php foreach($this->actu as $actu) : ?>
<?php echo $this->escape($actu->news_titre);?>
<?php endforeach; ?>

marche pas (meme si il detecte que l'enregistrement existe :S) ...

Hors ligne

 

#7 16-01-2009 09:01:36

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

Re: Problèmes de récupération de données

Hello,

Si actu_id est ta clé primaire, alors un simple :

Code:

$actu = new Actu();
$this->view->actu = $actu->find($id);

suffira.

A+


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

Hors ligne

 

#8 16-01-2009 11:56:53

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Problèmes de récupération de données

Le problème avec un find, c'est que l'on ne peut pas specifié les champs voulu. On n'a pas forcement besoin de tous les champs. Moi je l'evite celui là.


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#9 16-01-2009 12:27:40

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: Problèmes de récupération de données

Une autre question ... Au niveau du display (phtml) j'affiche sa comment ? >_<

Car :

<?php foreach($this->actu as $actu) : ?>
<?php echo $this->escape($actu->news_titre);?>
<?php endforeach; ?>

marche pas (meme si il detecte que l'enregistrement existe :S) ...

c'est quoi ton erreur ?
A première vue c'est normal tu fait un fetchRow et non un fetchAll.
enlève le foreach.

Le problème avec un find, c'est que l'on ne peut pas specifié les champs voulu. On n'a pas forcement besoin de tous les champs. Moi je l'evite celui là.

tout a fait d'accord, je ne l'ai jamais utilisé.

Hors ligne

 

#10 16-01-2009 12:43:51

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

Re: Problèmes de récupération de données

Hello,

alien7 a écrit:

Le problème avec un find, c'est que l'on ne peut pas specifié les champs voulu. On n'a pas forcement besoin de tous les champs. Moi je l'evite celui là.

Code:

public function getActuById($id)
{
    $select = $this->select()
        ->from($this->_name)
        ->where('actu_id = ?', $id)
    return $this->fetchRow($select);
}

Ta méthode fait pourtant exactement la même chose wink. Tu as simplement réécrit find().

A+

Dernière modification par mikaelkael (16-01-2009 12:44:13)


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

Hors ligne

 

#11 16-01-2009 13:56:55

Ultimata
Membre
Date d'inscription: 15-01-2009
Messages: 31

Re: Problèmes de récupération de données

Donc sans le foreach, j'ai ce genre d'erreur

Pour :
<?php echo $this->view->actu->news_titre;?>

sa donne :
Notice: Trying to get property of non-object in C:\wamp\www\dev\application\views\scripts\Actu\afficher.phtml on line 5



Et pour :
<?php echo $this->escape($actu->news_titre);?>

J'ai :
Notice: Trying to get property of non-object in C:\wamp\www\dev\application\views\scripts\Actu\afficher.phtml on line 12


sad

Hors ligne

 

#12 16-01-2009 14:13:46

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: Problèmes de récupération de données

dans ta vue :

Code:

<?php echo $this->escape($this->actu->news_titre); ?>

Dernière modification par baboune (16-01-2009 14:14:06)

Hors ligne

 

#13 16-01-2009 14:19:00

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: Problèmes de récupération de données

Ultimata ->
Met ca dans ton bootstrap

Code:

$db->setFetchMode(Zend_Db::FETCH_OBJ);

mikaelkael a écrit:

Hello,

alien7 a écrit:

Le problème avec un find, c'est que l'on ne peut pas specifié les champs voulu. On n'a pas forcement besoin de tous les champs. Moi je l'evite celui là.

Code:

public function getActuById($id)
{
    $select = $this->select()
        ->from($this->_name)
        ->where('actu_id = ?', $id)
    return $this->fetchRow($select);
}

Ta méthode fait pourtant exactement la même chose wink. Tu as simplement réécrit find().

A+

Oui bien sûr là dans mon exemple je n'ai pas spécifié de champs, je ne connais pas les champs qu'il veut. Mais bon il sarrive qu'on est pas besoin de tous les champs. Enfin moi je n'ai jamais eu à l'utiliser le find.

Dernière modification par alien7 (16-01-2009 14:19:42)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#14 16-01-2009 14:31:28

Ultimata
Membre
Date d'inscription: 15-01-2009
Messages: 31

Re: Problèmes de récupération de données

Merci de ton implication alien smile


J'aimerais savoir ou trouvé ce genre d'informations dans la doc sans passé par un forum pour mobilisé des membres à mon sujet ? :p Dans le Zend_Db ?


Pour répondre encore au soucis, j'ai sa dans l'index :
$db = Zend_Db::factory($config->db);
$db->setFetchMode(Zend_Db::FETCH_OBJ);
Zend_Db_Table::setDefaultAdapter($db);


Mais rien n'y fait.. Toujours la même erreur, je commence à être perdu dans tout sa sad ..

Hors ligne

 

#15 16-01-2009 14:39:36

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

Re: Problèmes de récupération de données

Hello,

Il n'est pas nécessaire d'avoir $db->setFetchMode(Zend_Db::FETCH_OBJ);. fetchRow te retournes un objet Zend_Db_Table_Row ou null si pas de données

As-tu bien un retour de ta base, un var_dump($actu->getActuById($id)); te donnes quoi ?

A+


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

Hors ligne

 

#16 16-01-2009 14:43:49

Ultimata
Membre
Date d'inscription: 15-01-2009
Messages: 31

Re: Problèmes de récupération de données

Oui apparemment j'ai un retour. Je pense que sa viens de l'affichage (phtml) mon problème :S


Retour:

object(Zend_Db_Table_Row)#42 (8) { ["_data:protected"]=>  array(4) { ["news_id"]=>  string(1) "2" ["news_titre"]=>  string(9) "Omagadddd" ["news_content"]=>  string(11) "bah niquelk" ["news_pv"]=>  string(1) "3" } ["_cleanData:protected"]=>  array(4) { ["news_id"]=>  string(1) "2" ["news_titre"]=>  string(9) "Omagadddd" ["news_content"]=>  string(11) "bah niquelk" ["news_pv"]=>  string(1) "3" } ["_modifiedFields:protected"]=>  array(0) { } ["_table:protected"]=>  object(Actu)#24 (16) { ["_name:protected"]=>  string(4) "news" ["_db:protected"]=>  object(Zend_Db_Adapter_Pdo_Mysql)#5 (10) { ["_pdoType:protected"]=>  string(5) "mysql" ["_numericDataTypes:protected"]=>  array(16) { [0]=>  int(0) [1]=>  int(1) [2]=>  int(2) ["INT"]=>  int(0) ["INTEGER"]=>  int(0) ["MEDIUMINT"]=>  int(0) ["SMALLINT"]=>  int(0) ["TINYINT"]=>  int(0) ["BIGINT"]=>  int(1) ["SERIAL"]=>  int(1) ["DEC"]=>  int(2) ["DECIMAL"]=>  int(2) ["DOUBLE"]=>  int(2) ["DOUBLE PRECISION"]=>  int(2) ["FIXED"]=>  int(2) ["FLOAT"]=>  int(2) } ["_defaultStmtClass:protected"]=>  string(21) "Zend_Db_Statement_Pdo" ["_config:protected"]=>  array(6) { ["host"]=>  string(9) "localhost" ["username"]=>  string(4) "root" ["password"]=>  string(0) "" ["dbname"]=>  string(2) "tp" ["options"]=>  array(2) { ["caseFolding"]=>  int(0) ["autoQuoteIdentifiers"]=>  bool(true) } ["driver_options"]=>  array(0) { } } ["_fetchMode:protected"]=>  int(5) ["_profiler:protected"]=>  object(Zend_Db_Profiler)#6 (4) { ["_queryProfiles:protected"]=>  array(0) { } ["_enabled:protected"]=>  bool(false) ["_filterElapsedSecs:protected"]=>  NULL ["_filterTypes:protected"]=>  NULL } ["_defaultProfilerClass:protected"]=>  string(16) "Zend_Db_Profiler" ["_connection:protected"]=>  object(PDO)#26 (0) { } ["_caseFolding:protected"]=>  int(0) ["_autoQuoteIdentifiers:protected"]=>  bool(true) } ["_schema:protected"]=>  NULL ["_cols:protected"]=>  array(4) { [0]=>  string(7) "news_id" [1]=>  string(10) "news_titre" [2]=>  string(12) "news_content" [3]=>  string(7) "news_pv" } ["_primary:protected"]=>  array(1) { [1]=>  string(7) "news_id" } ["_identity:protected"]=>  int(1) ["_sequence:protected"]=>  bool(true) ["_metadata:protected"]=>  array(4) { ["news_id"]=>  array(14) { ["SCHEMA_NAME"]=>  NULL ["TABLE_NAME"]=>  string(4) "news" ["COLUMN_NAME"]=>  string(7) "news_id" ["COLUMN_POSITION"]=>  int(1) ["DATA_TYPE"]=>  string(3) "int" ["DEFAULT"]=>  NULL ["NULLABLE"]=>  bool(false) ["LENGTH"]=>  NULL ["SCALE"]=>  NULL ["PRECISION"]=>  NULL ["UNSIGNED"]=>  NULL ["PRIMARY"]=>  bool(true) ["PRIMARY_POSITION"]=>  int(1) ["IDENTITY"]=>  bool(true) } ["news_titre"]=>  array(14) { ["SCHEMA_NAME"]=>  NULL ["TABLE_NAME"]=>  string(4) "news" ["COLUMN_NAME"]=>  string(10) "news_titre" ["COLUMN_POSITION"]=>  int(2) ["DATA_TYPE"]=>  string(7) "varchar" ["DEFAULT"]=>  NULL ["NULLABLE"]=>  bool(false) ["LENGTH"]=>  string(3) "255" ["SCALE"]=>  NULL ["PRECISION"]=>  NULL ["UNSIGNED"]=>  NULL ["PRIMARY"]=>  bool(false) ["PRIMARY_POSITION"]=>  NULL ["IDENTITY"]=>  bool(false) } ["news_content"]=>  array(14) { ["SCHEMA_NAME"]=>  NULL ["TABLE_NAME"]=>  string(4) "news" ["COLUMN_NAME"]=>  string(12) "news_content" ["COLUMN_POSITION"]=>  int(3) ["DATA_TYPE"]=>  string(4) "text" ["DEFAULT"]=>  NULL ["NULLABLE"]=>  bool(false) ["LENGTH"]=>  NULL ["SCALE"]=>  NULL ["PRECISION"]=>  NULL ["UNSIGNED"]=>  NULL ["PRIMARY"]=>  bool(false) ["PRIMARY_POSITION"]=>  NULL ["IDENTITY"]=>  bool(false) } ["news_pv"]=>  array(14) { ["SCHEMA_NAME"]=>  NULL ["TABLE_NAME"]=>  string(4) "news" ["COLUMN_NAME"]=>  string(7) "news_pv" ["COLUMN_POSITION"]=>  int(4) ["DATA_TYPE"]=>  string(3) "int" ["DEFAULT"]=>  NULL ["NULLABLE"]=>  bool(false) ["LENGTH"]=>  NULL ["SCALE"]=>  NULL ["PRECISION"]=>  NULL ["UNSIGNED"]=>  NULL ["PRIMARY"]=>  bool(false) ["PRIMARY_POSITION"]=>  NULL ["IDENTITY"]=>  bool(false) } } ["_metadataCache:protected"]=>  NULL ["_metadataCacheInClass:protected"]=>  bool(true) ["_rowClass:protected"]=>  string(17) "Zend_Db_Table_Row" ["_rowsetClass:protected"]=>  string(20) "Zend_Db_Table_Rowset" ["_referenceMap:protected"]=>  array(0) { } ["_dependentTables:protected"]=>  array(0) { } ["_defaultSource:protected"]=>  string(11) "defaultNone" ["_defaultValues:protected"]=>  array(0) { } } ["_connected:protected"]=>  bool(true) ["_readOnly:protected"]=>  bool(false) ["_tableClass:protected"]=>  string(4) "Actu" ["_primary:protected"]=>  array(1) { [1]=>  string(7) "news_id" } }

Hors ligne

 

#17 16-01-2009 14:50:39

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

Re: Problèmes de récupération de données

Hello,

Dans ta vue, fais

Code:

<?php echo $this->actu->news_titre;?>

et pas

Code:

<?php echo $this->view->actu->news_titre;?>

A+


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

Hors ligne

 

#18 16-01-2009 14:51:05

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: Problèmes de récupération de données

Salut,

Je n'ai pas l'impression de voir de données dans ce que tu dump smile (ni de champ 'actu_id' d'ailleurs, mais je suppose que c'était pour l'exemple)

Sinon pour info (même si ce n'est pas ce que t'utilises), attention quand on utilise la méthode find(), il ne faut pas oublié de faire un current() derrière.

Autre remarque pour tout le monde, la méthode find() n'est effectivement pas très utile lorsqu'on ne veut pas récupérer tous les champs de la table, cependant elle est très utile quand il s'agit de récupérer des enregistrements par clé(s) primaire(s) composée(s).


A+ benjamin.

Dernière modification par Delprog (16-01-2009 14:52:19)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#19 16-01-2009 14:53:36

baboune
Membre
Date d'inscription: 29-11-2008
Messages: 103

Re: Problèmes de récupération de données

ça marche tres bien avec

<?php echo $this->escape($this->actu->news_titre); ?>

Hors ligne

 

#20 16-01-2009 14:53:41

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

Re: Problèmes de récupération de données

Hello,

@Delprog: c'est un objet Zend_Db_Table_Row, __get() va récupérer la valeur de la clé dans le tableau _data qui est bien présent.

En tout cas pour news_titre mais effectivement pas d'actu_id wink.

A+

Dernière modification par mikaelkael (16-01-2009 14:54:52)


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

Hors ligne

 

#21 16-01-2009 16:19:29

Ultimata
Membre
Date d'inscription: 15-01-2009
Messages: 31

Re: Problèmes de récupération de données

Le problème étais effectivement dans la vue !!

<?php echo $this->actu->news_titre;?>

C'était la bonne syntaxe smile


Merci à vous tous pour cet aide!

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