【问题标题】:Insert data into 2 different tables from a single form using OctoberCMS Builder Plugin使用 OctoberCMS Builder 插件将数据从一个表单插入到 2 个不同的表中
【发布时间】:2017-03-20 09:08:42
【问题描述】:

我正在使用 OctoberCMS builder 插件来创建表单以将数据存储到数据库中。默认情况下,每个模型都属于单个数据库表。表单可以将数据存储到单个数据库表中。那么如何使用 Builder Plugin 将数据插入从单个表单捕获的 2 个不同的表中。

问候

【问题讨论】:

    标签: database forms model builder octobercms


    【解决方案1】:

    为此,您必须使用模型类手动处理保存过程。

    1- 打开你的模型类。

    2- 编写一个模型偶函数,如public function afterSave(){}

    例如,如果我在 reservation 模型中有一个 total 字段,并且我希望将此字段值自动插入另一个名为 accounting 的表中。

    public function afterSave(){
        $accounting = \Namespace\Pluginname\Models\Accounting::find(1);
        $accounting->myField = $this->total;
        $accounting->save();
    }
    

    所以在afterSavebeforeSavebeforeCreateafterCreate内你可以处理模型的保存过程。

    要查看这些功能之间的差异,您可以在此链接上阅读更多信息:https://octobercms.com/docs/database/model#events

    【讨论】:

    • 好答案。尽管在这种通用场景中,我可能会建议另一种保存其他数据的方法,即代替find(1)(它只是找到带有id=1 的模型,否则会失败,或者不是吗?)一个可以做findOrCreate(['reservation' => $this->id]) 保存在与此特定reservation 相关联的行中,只是为了给出一个更“现实”的例子,并指向Laravel / Elouent docs 进行更深入的挖掘,...
    • ... 以及 relationsrelation behaviour 可能更适合在这种情况下使用。不过,这里只是聪明的:P,并试图为像我这样的其他新手提供一些额外的指导,这可能有助于进一步阅读。
    • 很好的例子。当然find(1) 是一个不现实的例子,他可以编写代码来访问应用程序中的任何模型:D
    • 我已经想在这里添加一段时间了(希望我不会因为垃圾邮件而被禁止在这里 - 所以我在一个没有其他人会注意到的旧答案的评论中悄悄地这样做:P)你应该支持proposal for an OctoberCMS stackexchange section。我们需要更多拥有 200 名或更多声誉的人参与该提案,以便它进入测试阶段。所以你的支持会有所作为。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 2011-02-21
    • 1970-01-01
    相关资源
    最近更新 更多