如何使用Zend Framework 2在模型中设置2个表名

时间:2014-04-01 15:57:43

标签: php mysql sql zend-framework zend-framework2

我在Zend Framework 1.x中创建了一个扩展Zend_Db_Table_Abstract类的模型。

require_once 'Zend/Db/Table/Abstract.php';

class Model_Account extends Zend_Db_Table_Abstract
{

    protected $_name = 'accounts';

    public function someFunction()
    {
         //do something
    }

}

在Zend Framework中,您必须在$_name属性中声明表名。目前,我只知道如何一次声明一个表名,这意味着我的SQL语句都将被定向到$_name属性中指定的给定表。

有没有办法在模型中声明多个表,以便我可以有效地执行连接语句?

1 个答案:

答案 0 :(得分:3)

我了解您希望拥有多个模型,以便执行连接。实际上,您可以在没有实际需要第二个模型的情况下完成连接

require_once 'Zend/Db/Table/Abstract.php';

class Model_Account extends Zend_Db_Table_Abstract
{
    protected $_name = 'accounts';

    public function someFunction()
    {
        $otherTable = array('ot' => 'other_table');
        $columns    = array(
           'accounts.column_name', 
           'accounts.other_column_name'
        );
        $select = $this->select()
            ->from($this, $columns)
            ->join($otherTable, 'ot.accounts_id = accounts.id', array());

        $rowset = $this->fetchAll($select);
        return $rowset;
    }
}

如果您想要其他型号,只需在 models 文件夹中创建一个新的PHP文件,然后在那里声明您的课程。

class Model_OtherTable extends Zend_Db_Table_Abstract
{
    protected $_name = 'other_table';

    // ...
}

使用它的一个例子是:

$accounts = new Model_Account();
$results  = $accounts->someFunction();
foreach ($results as $result) {
    echo $result->column_name, '<br>';
    echo $result->other_column_name, '<br>';
}

// to see output of result set do this
Zend_Debug::dump($results->toArray());