2011-07-08 68 views
1

我正在从多个文本文件填充数据库的CakePHP项目。我没有编写大部分填充数据库的脚本(它们是用Perl/Python编写的)。尽管我创建了一些PHP脚本,它们根据某些其他文本文件中的信息来更改数据库中的某些数据。我的问题是所有这些脚本在CakePHP应用程序中的最佳位置。如果需要,通过什么方法可以让用户使用我的PHP脚本再次修改数据库中的信息?CakePHP。在哪里放置填充数据库的脚本?

回答

0

会允许用户再次使用我的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

+0

因此,如果我有Perl脚本处理CSV文件并相应地填充数据库,那么如何将它们合并到我的CakePHP模型逻辑中? – lanan

+0

你在问如何从CakePHP运行Perl脚本?如果是这样,那超出了我的范围。我在回答有关包含PHP脚本的问题。我确信有人比我更聪明地谈论Perl。我将编辑我的答案,以澄清我指的是您的问题的PHP脚本方面。 – cspray

+0

谢谢!我的不好:在这里的一篇文章中的两个问题....只是为了澄清我有一个用普通的PHP编写的脚本,它具有一些原始SQL和一些PHP代码(打开/读取CSV文件,处理数据库数据等),它被写入在我决定使用该框架之前。所以我想我现在需要在Alter类中创建方法来处理数据库,并将其余的PHP脚本放在AltersController中(处理CSV然后$ this-> Alter-> do_stuff();) – lanan

0

由于cakePHP是MVC,您应该将所有您在谈论的脚本放在控制器中。 因此,让我们说你的表被称为:“帖子” 所有的CRUD函数应该在模型中 - 所有对模型的访问应该来自控制器。基本上,与数据库对话的逻辑应该在模型中,调用该逻辑的函数应该在控制器中。我希望这能更好地解释我编辑答案之前的含义。

+0

如果有什么他应该把这个功能放入模型,而不是控制器。我也不认为他想知道如何设置与模型/表关联的控制器,而是如何使用原始SQL更新整个数据库。 – cspray

+0

由于cakePHP自动完成大部分工作,我仍然认为答案是将函数放在控制器中,控制器是整体的一部分,它告诉模型要做什么以及何时做什么。所以如果你想做一些事情,你可以把它放在控制器中,这样可以告诉模型去做需要完成的事情。 – YonoRan

+0

是的,你必须把代码放在控制器中告诉模型做什么。但是,你的控制器应该有效地使用1行代码来完成OP想要的'$ this-> ModelName-> model_action()'。你的答案意味着他应该完成控制器中的所有业务/数据逻辑,我认为这是打破了MVC模式。您现在拥有控制器中的数据逻辑。如果我需要在不同的控制器中使用相同的逻辑,该怎么办?我突然发现自己处于必须复制代码或每个请求加载多个控制器的情况。 – cspray

相关问题