5

INNER JOINZend2の2つのテーブル間で簡単に実行したいと思います。

具体的には、Zend2でこれを実行したいと思います。

SELECT * FROM foo, bar WHERE foo.foreign_id = bar.id;

私はFooTable

class FooTable
{
  protected $tableGateway;

  public function __construct(TableGateway $tableGateway)
  {
    $this->tableGateway = $tableGateway;
  }

  public function get($id)
  {
    $rowset = $this->tableGateway->select(function (Select $select) {
      $select->from('foo');
    });
  }
}

$select->from('foo');エラーを返します:

==>このオブジェクトはコンストラクターのテーブルやスキーマを使用して作成されたため、読み取り専用です。

したがって、FROMステートメントを微調整してFooTableとの間の単純な内部結合に一致させることはできませんBarTable

4

1 に答える 1

12

これは私が持っている実用的な例なので、これがあなたの旅に役立つことを願っています:

namespace Pool\Model;

use Zend\Db\TableGateway\AbstractTableGateway;
use Zend\Db\Sql\Select;

class IpaddressPool extends AbstractTableGateway
{
    public function __construct($adapter)
    {
        $this->table = 'ipaddress_pool';

        $this->adapter = $adapter;

        $this->initialize();
    }

    public function Leases($poolid)
    {
        $result = $this->select(function (Select $select) use ($poolid) {
            $select
                ->columns(array(
                    'ipaddress',
                    'accountid',
                    'productid',
                    'webaccountid'
                ))
                ->join('account', 'account.accountid = ipaddress_pool.accountid', array(
                    'firstname',
                    'lastname'
                ))
                ->join('product_hosting', 'product_hosting.hostingid = ipaddress_pool.hostingid', array(
                    'name'
                ))
                ->join('webaccount', 'webaccount.webaccountid = ipaddress_pool.webaccountid', array(
                    'domain'
                ))->where->equalTo('ipaddress_pool.poolid', $poolid);
        });

        return $result->toArray();
    }
}
于 2013-01-17T01:56:53.100 に答える