对于Zend框架2的多个表(multiple tables for Zend Framework 2

2019-08-17 01:12发布

我是新来的Zend框架2.我成功地完成了专辑教程ZF2。 现在,我想只显示来自数据库中的多个表的某些数据。 我有一个简单的数据库设置了桌子,例如,人,书,status..etc。 这真的什么并不重要假设数据库的做。 如果有一个教程将告诉我一步一步的指导,从表连接到显示数据我想知道的是。 我所看到的显示怎么办加入代码的片段,但我还没有发现任何教程上设置类,以及如何配置Module.php。 换句话说,在相册中的模块有一个表名getServiceConfig硬编码()。 但我怎么设置它,所以它知道我是从多个表中请求数据。 另外,如果我想设置的关系,做我仍然创建数据库表类像相册教程,或者它会是不同的东西。 你能帮帮,或告诉我在正确的道路? 如果你知道,解释处理多个表中的任何教程,这将是巨大的。

Answer 1:

该ablums教程使用Zend\Db\TableGateway不支持连接到多个表。

您需要使用Zend\Db直接或通过映射类,如AbstractDbMapper的ZfcBase模块内。

基本用法是这样的:

<?php

// Given that $dbAdapter is an instance of Zend\Db\Adapter\Adapter

use Zend\Db\Sql\Select();
use Zend\Db\ResultSet\ResultSet();

$select = new Select();
$select->from('album')
   ->columns(array('album.*', 'a_name' => 'artist.name'))
   ->join('artist', 'album.artist_id' = 'artist.id');

$statement = $dbAdapter->createStatement();
$select->prepareStatement($dbAdapter, $statement);
$driverResult = $statment->execute();

$resultset = new ResultSet();
$resultset->initialize($driverResult); // can use setDataSource() for older ZF2 versions.

foreach ($resultset as $row) {
        // $row is an ArrayObject
}

join()方法用于执行之间的联接albumartist表。 我们还使用columns()来选择其中返回列。 在这种情况下,我创建一个名为别名a_namename ,艺术家表中的列。

一旦Select对象设置了,那么剩下的就是标准Db代码,将返回ResultSet对象包含你的数据。



Answer 2:

只是为了在抢劫出色答卷扩大,其简单的把它更进一步,填充多个对象,形成您需要的关系。

<?php

// Given that $dbAdapter is an instance of Zend\Db\Adapter\Adapter

use Zend\Db\Sql\Select();
use Zend\Db\ResultSet\ResultSet();

$select = new Select();
$select->from('album')
   ->columns(array('album.*', 'artist.*'))
   ->join('artist', 'album.artist_id' = 'artist.artist_id');

$statement = $dbAdapter->createStatement();
$select->prepareStatement($dbAdapter, $statement);
$driverResult = $statement->execute(); // execute statement to get result

$resultset = new ResultSet();
$resultset->setDataSource($driverResult);

$albumHydrator = new AlbumHydrator;
$artistHydrator = new ArtistHydrator;

foreach($resultset as $row) { // $row is an ArrayObject
    $album = $albumHydrator->hydrate($row);
    $artist = $artistHydrator->hydrate($row);
    $album->setArtist($artist);
}

你也应该看看保湿效果将直接从ResultSet中建立自己的对象为您提供:

http://framework.zend.com/manual/2.0/en/modules/zend.db.result-set.html



Answer 3:

use Zend\Db\Sql\Select;
$select = new Select();
// or, to produce a $select bound to a specific table
// $select = new Select('foo');

$select->join(
     'foo' // table name,
     'id = bar.id', // expression to join on (will be quoted by platform object before insertion),
     array('bar', 'baz'), // (optional) list of columns, same requiremetns as columns() above
     $select::JOIN_OUTER // (optional), one of inner, outer, left, right also represtned by constants in the API
);

$select->from(array('f' => 'foo'))  // base table
    ->join(array('b' => 'bar'),     // join table with alias
    'f.foo_id = b.foo_id');         // join expression


文章来源: multiple tables for Zend Framework 2