Zend3中的tablegateway与Zend1中的模型

时间:2017-05-26 15:24:31

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

在过去的几年里,我在ZF1.x开发了一些项目。现在我开始了一个新的并且第一次使用ZF3。我发现了一些非常好的改进,但我对数据库模型有点失落。

tablegateway设计模式的真正好处是什么?在Zend1中,我发现很容易在我的模型类中连接几个表,现在我可以使用网关,交换数组,在我的Module.php中,我有类似的东西:

public function getServiceConfig()
{
    return [
            'factories' => [
                    Model\ImportTable::class => function($container) {
                        $tableGateway = $container->get(Model\ImportTableGateway::class);
                        return new Model\ImportTable($tableGateway);
                    },
                    Model\ImportTableGateway::class => function ($container) {
                        $dbAdapter = $container->get(AdapterInterface::class);
                        $resultSetPrototype = new ResultSet();
                        $resultSetPrototype->setArrayObjectPrototype(new Model\Import());
                        return new TableGateway('tablename', $dbAdapter, null, $resultSetPrototype);
                    },
                    ],
                    ];
}

我也相信教程,手动填写我的所有tablecolumns,hm看起来很静态。这是第一个问题。

第二个:我很难决定在哪里加入几个表。这是一个小而简单的例子,我的表格要复杂得多:

作者1 - > n本书

主题是书籍,但我还需要作者表来显示当然的名称,没有人想看到外键。什么是最先进的?我应该在哪里放置我的sql和join语句,如何在模式中实现,那么Module.php呢?

所以我或多或少有3个文件,它们对使用过的表有一些信息。定义连接的最佳方式和地点是什么?当然我可以在我的控制器中编写连接代码,但这在MVC应用程序中是不行的,不是吗?

跳过我的Interfaceclass怎么样?那么在哪里设置过滤器?我真的要在工厂里填写表名(ony one)吗?

编辑新想法:

我对语法很反感,但现在它适用于此:

public function Project_Unit(Unit $unit = null){

    $select = $this->tableGateway->getSql()->select()
        ->join('t_unit', 't_project.ProjectID = t_unit.ProjectID',array('UnitID','CI_Number', 'Unitname','Shortcut','Suppliername'));       //, left
    return $this->tableGateway->selectWith($select);

}

我立刻有了新的问题。我在两个表中都有相同的字段名,如描述等。 如何在此语句中添加别名。

在我看来,我怎样才能添加类似群组的内容,这就是我所拥有的

 <?php 

foreach ($imports as $import) : 
var_dump(get_object_vars($import));?>
    <tr>
    <td><?= $this->escapeHtml($import->Projectname) ?></td>
     <td><?= $this->escapeHtml($import->Shortcut) ?></td>
     <td><?= $this->escapeHtml($import->CI_Number) ?></td>
     <td><?= $this->escapeHtml($import->Description) ?></td>
     <td><?= $this->escapeHtml($import->Component_Class) ?></td>

这是一个片段,vardump只是为了检查我已经拥有哪些字段。那么如何对视图进行分组呢?我需要像

这样的东西

每个项目     项目组的每个单位

是否有一些优雅的可能性,或者我是否需要另一个循环并通过css进行拟合?

0 个答案:

没有答案