【问题标题】:CakePHP. Where to put scripts that populate database?蛋糕PHP。将填充数据库的脚本放在哪里?
【发布时间】:2011-07-09 01:13:25
【问题描述】:

我正在开发一个包含多个文本文件的数据库的 CakePHP 项目。我没有编写大多数填充数据库的脚本(它们是用 Perl/Python 编写的)。虽然我创建了几个 PHP 脚本,但它们根据一些附加文本文件中的信息更改数据库中的一些数据。我的问题是所有这些脚本在 CakePHP 应用程序中的最佳位置。如果需要,允许用户使用我的 PHP 脚本再次修改数据库中的信息的常见做法是什么?

【问题讨论】:

    标签: database cakephp scripting


    【解决方案1】:

    如有必要,是否允许用户使用我的 PHP 脚本再次修改数据库中的信息?

    由于您正在处理数据库,因此这里显而易见的选择是创建一个模型,经批准的用户可以利用该模型来更改您的数据库。

    这是一个非常简单的例子,说明我可以做什么:

    class Alter extends AppModel {
    
        // tells the model not to use a database table
        public $useTable = false;
    
        public function do_stuff() {
            // your code to include scripts and alter database with, I'm assuming, raw SQL
        }
    
    }
    

    那么你需要一个用于该模型的控制器

    class AltersController extends AppController {
    
        public function edit($param1, $param2) {
             // code here to access the model
             $this->Alter->do_stuff();
        }
    
    }
    

    现在您的用户可以根据需要编辑数据库。您的数据逻辑也被正确封装在模型中,我认为它应该放在哪里。

    编辑:

    关于 OP 的问题。 Here's an article that talks about using Perl with PHP.

    【讨论】:

    • 那么,如果我有处理 CSV 文件并相应地填充数据库的 Perl 脚本,我该如何将它们合并到我的 CakePHP 模型逻辑中?
    • 您在问如何从 CakePHP 运行 Perl 脚本吗?如果是这样,那超出了我的权限。我正在回答与包含 PHP 脚本有关的问题。我确信有人比我更聪明地谈论 Perl。我将编辑我的答案以澄清我指的是您问题的 PHP 脚本方面。
    • 谢谢!我的错:这里的一篇文章中有两个问题....只是为了澄清我有一个用普通 PHP 编写的脚本,其中包含一些原始 SQL 和一些 PHP 代码(打开/读取 CSV 文件,处理 db 数据等),它是写的在我决定使用该框架之前。所以我想现在我需要在 Alter 类中创建方法来处理数据库并将我的 PHP 脚本的其余部分放在 AltersController 中(处理 CSV 然后 $this->Alter->do_stuff();)
    【解决方案2】:

    由于 cakePHP 是 MVC,您应该将所有您谈论的脚本放在控制器中。 所以假设你的表被称为:“posts” 所有的 CRUD 功能都应该在模型中——对模型的所有访问都应该来自控制器。基本上,与数据库对话的逻辑应该在模型中,调用该逻辑的函数应该在控制器中。我希望这能更好地解释我在编辑答案之前的意思。

    【讨论】:

    • 如果有的话,他应该将此功能放入模型中,而不是控制器中。我也不认为他想知道如何设置与模型/表关联的控制器,而是如何使用原始 SQL 来更新整个数据库。
    • 由于 cakePHP 自动完成了大部分工作,我仍然认为答案是将函数放在控制器中,控制器是整体的一部分,它告诉模型什么时候做什么。因此,如果您想做某事,请将其放入控制器中,这会告诉模型执行需要执行的操作。
    • 是的,您必须将代码放入控制器中以告诉模型要做什么。但是,您的控制器实际上应该是 1 行代码来执行 OP 想要的操作,$this->ModelName->model_action()。您的回答暗示他应该在控制器中完成所有业务/数据逻辑,在我看来这打破了 MVC 模式。您现在在控制器中有数据逻辑。如果我需要在不同的控制器中使用相同的逻辑怎么办?我突然发现自己必须复制代码或为每个请求加载多个控制器。
    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多