2011-07-08 66 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

相關問題