2011-12-26 114 views

回答

1

您可以在模型級別添加相關實體:

https://stackoverflow.com/a/7466839/204819

如果這不是一個選項,您可以隨時爲您的「編輯」自定義處理程序和「刪除」按鈕,使用執行操作內部ORM甚至模型級別。

+0

我已經添加了一個使用模型來執行此操作的示例 - 您是否有覆蓋編輯和刪除按鈕所需的代碼示例?謝謝 – 2011-12-28 00:05:37

1

您可以使用函數beforeInsert,afterInsert,beforeDelete,afterDelete和beforeUpdate,afterUpdate在數據庫中執行額外的處理。例如, 在您的webroot中使用ATK 4.1.3的解壓縮安裝將創建一個名爲agiletoolkit的文件夾,該文件夾在下文中稱爲ATKHOME。

在帶有三個字段(id,tasktype_desc和budget_code)的mysql中創建一個簡單的表TASKTYPE,並使用id和budget_code創建另一個表TASKTYPE_BUDGET。

在表中創建兩個型號ATKHOME/lib中/型號如下(你可能需要創建示範目錄,如果犯規存在的話)

class Model_TaskType extends Model_Table { 
    public $entity_code='tasktype'; 
    public $table_alias='ty'; 

    function defineFields(){ 
      parent::defineFields(); 

      $this->newField('id') 
       ->mandatory(true);; 

      $this->newField('tasktype_desc') 
       ->mandatory(true); 

      $this->newField('budget_code') 
       ->mandatory(true); 
     } 

     public function afterInsert($new_id){ 
     $ttb=$this->add('Model_TaskTypeBudget'); 
     $ttb->set('id',$new_id) 
      ->set('budget_code',$this->get('budget_code')); 
     $ttb->insert(); 
     return $this; 
     } 

     public function beforeUpdate(&$data){ 
     $ttb=$this->add('Model_TaskTypeBudget')->loadData($data['id']); 
     $ttb->set('budget_code', $data['budget_code']); 
     $ttb->update(); 
     return $this; 
     } 

     public function beforeDelete(&$data){ 
     $ttb=$this->add('Model_TaskTypeBudget')->loadData($data['id']); 
     $ttb->delete(); 
     return $this; 
     } 
} 

注意,如果你正使用InnoDB和有外鍵,你必須按照正確的順序進行插入和刪除,例如如果在ID上有從TaskTypeBudget到TaskType的外鍵,那麼它應該使用beforeDelete和afterInsert來防止違反約束。

class Model_TaskTypeBudget extends Model_Table { 
    public $entity_code='tasktype_budget'; 
    public $table_alias='tyb'; 

    function defineFields(){ 
      parent::defineFields(); 

      $this->newField('id') 
       ->mandatory(true); 

      $this->newField('budget_code') 
        ->mandatory(true); 

    } 
} 

而且在ATKHOME /頁頁面這樣

class page_tasktype extends Page { 

    function init(){ 
     parent::init(); 
     $p=$this; 

     $tt=$this->add('Model_TaskType'); 
     $crud=$p->add('CRUD'); 
     $crud->setModel($tt, array('id','tasktype_desc', 'budget_code')); 

     if($crud->grid) 
      $crud->grid->addPaginator(10); 
     } 
} 

還要注意小心包括開幕<?每個班級線前的PHP標籤,但不包括結束? >因爲這可能會導致Ajax中的錯誤。

在ATKHOME/config-default.php中,將mysql連接的用戶名和密碼從root/root修改爲mysql數據庫的用戶名和密碼。

$config['dsn']='mysql://atktest:[email protected]/atktest'; 

和修改ATKHOME/lib目錄/ Frontend.php以取消8號線,讓所有的頁面連接到數據庫(你也可以只添加$這個 - >數據庫連接();行頁面

class Frontend extends ApiFrontend { 
function init(){ 
    parent::init(); 
    $this->dbConnect(); //uncommented 

同樣Frontend.php,圍繞插入線50以下,以一個按鈕添加到默認菜單添加了新的一頁。

->addMenuItem('CRUD Test', 'tasktype') 

現在去你的網頁瀏覽器並輸入http://localhost/agiletoolkit並在第一頁上單擊CRUD測試。添加行將導致將行添加到TASKTYPE,並將具有相同ID和budget_code的行添加到TASKTYPE_BUDGET。編輯budget_code將反映在兩個表中,刪除該行將從兩個表中刪除它。

如何整潔簡單的是,一旦你知道ATk4提供的功能?