如何在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