Я хотел бы сделать простой INNER JOIN
между двумя таблицами в Zend2.
Конкретно, я хотел бы сделать это в 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
.
Надеюсь, это поможет вам в пути, поскольку это рабочий пример, который у меня есть:
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(); } }