2017-07-06 4 views
0

Ceci est encore une question de compréhension, toute explication est appréciée:comment obtenir plusieurs lignes de mon modèle

I avant avait la question de montrer une table foreignkey à mon avis, qui fonctionne maintenant, il ressemble suit :

screenshot to show result

C'est tout à fait ce que je voulais, mais: je ne reçois la première ligne, mais il y a bien sûr plusieurs dans la deuxième collection (il est la ligne avec le nom de fichier).

Il est à cause de ma méthode dans mon modèle, qui ressemble suit:

public function getImportU($unitid) 
{ 
    $unitid = (int) $unitid; 
    $rowset = $this->tableGateway->select(['UnitID' => $unitid]); 
    $row = $rowset->current(); 
    if (! $row) { 
     return null; 
    } 
    else{ 
     return $row; 
    } 
} 

Bien sûr, j'ai un objet de ligne et il retourne la ligne en cours. Donc, je pensais, ok je vais essayer avec un ensemble de lignes, après qu'il ressemblait à ceci:

public function getImportU($unitid) 
{ 
    $unitid = (int) $unitid; 
    $rowset = $this->tableGateway->select(['UnitID' => $unitid]); 
    //$row = $rowset->current(); 
    if (! $rowset) { 
     return null; 
    } 
    else{ 
     return $rowset; 
    } 
} 

J'ai eu quelques erreurs qui ont dit:

Remarque: Undefined property: Zend \ Db \ ResultSet \ ResultSet :: Importdate $ en Blockquote

Alors, comment obtenir un recordcollection, tous les dossiers, il y a dans le tableau avec le même unitid? Et comment les appeler dans la vue. Ce n'est probablement pas une grosse affaire, mais je n'ai rien trouvé d'utilisable dans la documentation. EDIT1: Ajout de code associé.

Ici, je passe le ViewModel dans mon contrôleur indexAction:

return new ViewModel([ 
       'projects' => $this->projectTable->fetchAll(), 
       'dcls' => $this->table, 
        //'id' =>$this->authService, 
       ]); 

Et voici un extrait de mon index.phtml:

foreach ($projects as $project) : 
//var_dump(get_object_vars($project)); 
?> 
    <tr> 
    <td><?= $project['Projectname']?></td> 
    <td><?= $project['ProjectShortcut']?></td> 
    <td><?= $project['ProjectCiNumber']?></td> 
    <td><?= $project['Unitname']?></td> 
    <td><?= $project['UnitShortcut']?></td> 
    <td><?= $project['UnitCiNumber']?></td> 
    <td><?= $project['UnitID']?></td> 
    </tr> 
    <?php 
    $dclsx=$dcls->getImportU($project['UnitID']); 
    // var_dump($dclss); 
    if (empty ($dclsx)==false){ ?> 
     <tr> 
     <th></th> 
     <th>filename</th> 
     <th>importdate</th> 
     <th>importuser</th> 
     <th>importok</th> 
     </tr> 
    <?php 
     $dclss=array($dclsx); 
    // var_dump($dclss); 
     foreach ($dclss as $dcl) : 
     ?> 
     <tr> 
      <td> </td> 
      <td><?= $dcl->filename?></td> 
      <td><?= $dcl->Importdate?></td> 
      <td><?= $dcl->Importuser?></td> 
     </tr> 
     ?php 
    endforeach; 
     } 
    endforeach; ?> 
+0

S'il vous plaît ajouter le code où « getImportU() » est utilisé. –

+0

J'ai ajouté le code correspondant –

Répondre

2

Je crois que vous êtes assez proche de la solution. "getImportU" retour d'un ensemble de lignes est la bonne solution que je vois:

public function getImportU($unitid) 
{ 
    $unitid = (int) $unitid; 
    $rowset = $this->tableGateway->select(['UnitID' => $unitid]); 
    if (! $rowset) { 
     return null; 
    } 
    else{ 
     return $rowset; 
    } 
} 

Votre vue devrait être changée:

<?php 
    $dclss=array($dclsx); 
// var_dump($dclss); 
    foreach ($dclss as $dcl) : 

à:

<?php 
    foreach ($dclsx as $dcl) : 

$ dclsx est resultset et peut être itéré, cela n'a pas de sens de le mettre dans un tableau.

Votre erreur suggère également que "Importdate" ne peut pas être trouvé dans la table blockquote. S'il vous plaît vérifier si la colonne existe à la table (également vérifier le nom est sensible à la casse, est-il « Importdate », « importdate » ou « importDate »?)

+0

oui, la colonne existe, comme vous pouvez le voir dans ma capture d'écran. Bur, votre solution fonctionne plutôt bien, alors je voterai pour votre réponse ;-) –