我有两个类,A和B,每个类映射一个表来自我的数据库。 A和B具有第二表中的主键列和另一列之间的关系。 我想在一个函数中插入/更新两个表,我不确定最好的方法是什么。
我在Google上找到了一些解决方案,但我不确定这是最好的方法。
我该怎么办?我的想法是有一个类似save()
的方法,它调用A和B的保存方法。如果这是最好的选择,我应该扩展什么,CFormModel或CActiveRecord?如果我尝试扩展CFormModel,通过遵循文档,使用save()
或insert()
或update()
等方法是不对的。文档说CFormModel仅用于存储不会保存的数据。如果我扩展CActiveRecord,我将访问save()方法,但我不会映射任何东西。文档说CActiveRecord必须映射数据库中的表。
那么,最好的方法是什么?
答案 0 :(得分:1)
如果你有从gii生成工具生成的yii的默认文件夹结构,你可以在组件文件夹中使用控制器文件并在那里添加你的保存方法并访问你想要的任何CActiveRecords。然后,您可以从任何您想要的控制器中调用您的保存方法。
答案 1 :(得分:0)
我认为这是最好的answer。更好地控制数据流总是更好。
@DCoder我认为在大规模的应用程序中,这将是至关重要的。如果您将使用aftersave()或覆盖save()并忘记工作流程,那么您将遇到很多问题。你可以在数据库中找到行,你可能不知道它们来自哪里,因为你本能地调用save()。替代方案更好,具有调用save()的自定义函数。但你必须知道这种自定义方法存在。