-2

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 );

列名が「lastrun」の場合、fetchAll()、find() などから返される値をオーバーライドしたい。

4

2 に答える 2

1

あなたがこれについて行っている方法はうまくいきません。またはプロパティ__getからデータを取得するために使用され、通常はゲッターと組み合わせて使用​​されます。protectedprivate

たとえば、クラスに実装__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 コンポーネント全体を書き直したい場合を除く)。結果セットを a で実行し、の値を必要なforeach値に変更するlastrunだけです。

Zend Db コンポーネントをオーバーライドして必要なことを行う場所を見つけようとしましたが、それには多くのクラスが含まれます。

DbTable クラスを使用する場合、それらは 1 つのテーブルとのみ対話することに注意してください。影響を与えたいテーブルごとにコードを複製するか、何らかの基本クラスを拡張する必要があります。

ストレートな Sql を使用して、作成できるクエリをフレーム化するオプションが常にあります。

幸運を!

于 2012-10-10T10:59:47.597 に答える
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

}
于 2012-10-11T14:39:34.150 に答える