在我的應用程序中,我有所有表共用的字段,如創建日期,更新日期等。要分配這些值,我使用beforeValidate
回調。現在,這callback
是所有型號相同。在yii中創建基本模型類
爲了避免代碼重複,我想創建一個基礎模型類。
但是,當我試圖創建一個基本模型時,yii拋出錯誤,說table cannot be found in database
,這是真的,因爲我沒有這個基本模型的任何表。
有什麼辦法可以創建基礎模型類。
在我的應用程序中,我有所有表共用的字段,如創建日期,更新日期等。要分配這些值,我使用beforeValidate
回調。現在,這callback
是所有型號相同。在yii中創建基本模型類
爲了避免代碼重複,我想創建一個基礎模型類。
但是,當我試圖創建一個基本模型時,yii拋出錯誤,說table cannot be found in database
,這是真的,因爲我沒有這個基本模型的任何表。
有什麼辦法可以創建基礎模型類。
對你沒有幫助的事情,你可以自己寫一個行爲類。
希望這會有所幫助。
編輯:
假設您正在使用ActiveRecords。
如果你想創建一個新的基礎模型,你可以這樣做:
abstract class MyBaseARClass extends CActiveRecord{
protected function beforeValidate(){
if(parent::beforeValidate()){
// assign your fields
return true;
}
else return false;
}
}
,你應該去ctimestampbehavior如果它可以在你的情況下使用,否則ofcourse你可以使用一個新的基類,還是讓我知道是否需要澄清。 – 2012-02-21 12:42:02
您是否創建了基表?考慮Yii框架,在模型和基礎模型之間建立關係可能會更容易。
是的,如果你使用動態數據庫結構,工作或有其他原因與誼ActiveRecord的工作,而不爲每個表創建類在DB,你可以使用smartActiveRecord yii extension
我分開這幾年分鐘再予前從我的其他擴展名 - 增加了版本沒有任何模型(它會將所有的數據在插入&更新特殊表AR行爲(和創建它,如果它是不存在的),它具有與源表+「修訂字段」和主鍵分機相同的結構由此字段結束。
看SmartAR.php source,在評論中有用法的例子。
您也可以爲每個表創建基類和特定類,然後您需要在每個特定的模型類中至少定義「tableName」和靜態「模型」方法。 (或者你可以嘗試使用get_class($ this)來檢測基類中的表名, – Nayjest 2012-02-21 18:08:08
在你的情況,你需要重寫
public static function model($className=__CLASS__)
{
return parent::model($className);
}
在每個子類中的Yii所以會知道使用模型的表。否則,它會嘗試使用基類作爲表名。
I.e.
class User extends BaseActiveRecord {
public static function model($className=__CLASS__)
{
return parent::model($className);
}
}
您使用的是cactiverecord嗎? – 2012-02-21 12:34:28
@ bool.dev我使用的ActiveRecord – robert 2012-02-21 12:53:13
ok..see我的編輯工作solution..it恕我直言 – 2012-02-21 12:55:12