如何从我的模型中获取几行

时间:2017-07-06 09:02:39

标签: zend-framework zend-db zend-framework3

这又是一个理解问题,任何解释都表示赞赏:

我以前遇到过在我的视图中显示一个外键表的问题,现在有效,看起来如下:

screenshot to show result

这就是我想要的,但是: 我只得到第一行,但第二个集合当然有几个(它是带文件名的行)。

这是因为我的模型中的方法,如下所示:

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

当然我有一个行对象,它返回当前行。所以我想,好吧我会尝试使用行集,之后看起来像这样:

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

我收到了一些错误:

  

注意:未定义的属性:Zend \ Db \ ResultSet \ ResultSet :: $ Importdate in   块引用

那么如何获取记录集,表中的所有记录都具有相同的unitid?以及如何在视图中调用它们。这可能不是什么大问题,但我在文档中找不到任何可用的东西。 EDIT1:添加相关代码。

这里我传递了我的Controller indexAction中的ViewModel

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

这里是我的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; ?>

1 个答案:

答案 0 :(得分:2)

我相信你非常接近解决方案。 &#34; getImportU&#34;正如我所见,返回行集是正确的解决方案:

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

您的观点应改为:

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

为:

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

$ dclsx是一个结果集,可以迭代,将它放在数组中是没有意义的。

您的错误也表明&#34; Importdate&#34;在blockquote表中找不到。 请检查表中是否存在该列(同时检查名称是否区分大小写,是否为&#34; Importdate&#34;,&#34; importdate&#34;或&#34; importDate&#34;?)