2013-01-16 28 views
5

Tôi muốn thực hiện một đơn giản INNER JOIN giữa hai bảng trong Zend2.TableGateway với nhiều bảng TỪ

Cụ thể, tôi muốn làm điều này trong Zend2:

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

Tôi có một 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'); 
    }); 
    } 
} 

Các $select->from('foo'); lợi nhuận một lỗi:

==>Vì đối tượng này được tạo ra với một bảng và/hoặc lược đồ trong hàm tạo, nó chỉ đọc.

Vì vậy, tôi không thể tinh chỉnh tuyên bố TỪ của mình để khớp với sự liên kết bên trong đơn giản giữa FooTableBarTable.

Trả lời

12

Tôi hy vọng điều này sẽ giúp bạn cùng hành trình của bạn vì đây là một ví dụ làm việc tôi có:

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(); 
    } 
} 
+0

'use' trong ví dụ trên có nghĩa là gì/làm gì? Đây có phải là một hàm Lambda không? 'Sử dụng' được sử dụng để sử dụng biến bên ngoài trong hàm được khai báo? –

+1

Tôi sẽ giả sử bạn đang nói về phần 'use ($ poolid)'. Vì $ this-> select đang gọi hàm(), tôi cũng cần sử dụng một biến trong truy vấn của mình, thêm 'use ($ poolid)' cho phép khả năng đó. Chức năng bình thường 'tên hàm ($ var1, $ var2)', nhưng trong trường hợp này chúng ta đang thực hiện một hàm gọi ra khỏi Select – Diemuzi

+0

Không sao, tôi nhận được câu trả lời ... PHP đã thay đổi rất nhiều kể từ 4 năm tôi có tránh xa nó. Đây là bài viết hay về nó: http://stackoverflow.com/questions/1065188/in-php-5-3-0-what-is-the-function-use-identifier-should-a-sane-programmer-use –

Các vấn đề liên quan