如何在atk4中實現多表更新/刪除?多表更新/刪除atk4
回答
您可以在模型級別添加相關實體:
https://stackoverflow.com/a/7466839/204819
如果這不是一個選項,您可以隨時爲您的「編輯」自定義處理程序和「刪除」按鈕,使用執行操作內部ORM甚至模型級別。
您可以使用函數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提供的功能?
- 1. 如何刪除atk4中的子/記錄?
- 2. 更新表中刪除
- 3. JPA更新多對多刪除記錄
- 4. 最新更新和刪除的表?
- 5. MySQL從表或更新表列刪除標記爲已刪除?
- 6. MySQL刪除和更新多行
- 7. 刪除多表
- 8. 數據表在刪除後不更新
- 9. 不更新列表時刪除元素
- 10. 同時更新和刪除一張表
- 11. 插入/刪除行時更新表格
- 12. 更新刪除列表視圖項目
- 13. 更新/刪除Hive中的外部表
- 14. 只刪除或只更新或更新+刪除mysql
- 15. SQL選擇行並從動態多個表中刪除/更新
- 16. 多表觸發器更新/刪除/插入
- 17. Mysql - 刪除多表
- 18. 更新和刪除記錄
- 19. 我更新,刪除在Silverlight
- 20. API刪除不更新DB
- 21. Firebase批量更新/刪除
- 22. MVC更新刪除數據
- 23. DataGridview不會更新/刪除
- 24. 如何更新/刪除ASPNETDB.MDF'vw_aspnet_MembershipUsers'?
- 25. Angular2-刪除後更新UI
- 26. Zend_Db_Select更新/刪除查詢
- 27. 更新而不是刪除
- 28. MongoDb casscade更新/刪除
- 29. 更新,刪除域模型
- 30. 更新而不是刪除
我已經添加了一個使用模型來執行此操作的示例 - 您是否有覆蓋編輯和刪除按鈕所需的代碼示例?謝謝 – 2011-12-28 00:05:37