是否可以覆盖Model-> fetchAll()中的值,以便全局工作。我试图在模型中覆盖它,但不起作用:
class Application_Model_DbTable_OdbcPush extends Zend_Db_Table_Abstract
{
public function __get(string $col)
{
$res = parent::__get($col);
if ($col == "lastrun") {
$res = ($res == "1912-12-12 00:00:00+07" ? NULL : $res);
}
return $res;
}
//...
}
在控制器中:
$odbcModel = new Application_Model_DbTable_OdbcPush();
$rs = $odbcModel->fetchAll( $select );
当col名称为“lastrun”时,我想覆盖从fetchAll(),find()等返回的值;
答案 0 :(得分:1)
你的方式不会起作用。 __get
用于从protected
或private
属性获取数据,通常与getter一起使用。
例如,如果您在__get()
课程中实施Application_Model_DbTable_OdbcPush
,则可以执行以下操作:
$model = new Application_Model_DbTable_OdbcPush();
//echo out the _primary property (primary key of the table)
echo $model->primary;
并希望它能够发挥作用。因为_primary
中存在Zend_Db_Table_Abstract
作为属性。
要执行您想要执行的操作,您需要在返回结果集后执行此操作(除非您要重写整个Zend Db组件)。只需通过foreach
运行结果集,然后将lastrun
的值更改为您想要的值。
我试图找到一个覆盖Zend Db组件的地方来做你想做的事情,但它会涉及很多类。
请记住,在使用DbTable类时,它们只与一个表进行交互。您需要为要生效的每个表复制代码,否则您需要扩展某种基类。
您始终可以选择使用直接Sql来构建您可以提出的任何查询。
祝你好运!
答案 1 :(得分:0)
找到答案,我在这里分享的社区:D http://framework.zend.com/manual/1.12/en/zend.db.table.row.html
所以我们必须重载Zend_Db_Table_Row并将其分配给model / dbtable:
class Application_Model_DbTable_Row_OdbcPush extends Zend_Db_Table_Row_Abstract
{
// do some override here
}
class Application_Model_DbTable_OdbcPush extends Zend_Db_Table_Abstract
{
protected $_name = 'odbcpush';
protected $_primary = 'id';
private $_global = null;
protected $_rowClass = "Application_Model_DbTable_Row_OdbcPush";
// etc
}