我想在Zend2中的两个表之间做一个简单的INNER JOIN
。
具体来说,我想在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
之间的简单内部联接。
答案 0 :(得分: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();
}
}