我在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
属性中指定的给定表。
有没有办法在模型中声明多个表,以便我可以有效地执行连接语句?
答案 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());