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

CSVファイルを処理し、それに応じてデータベースを移植するPerlスクリプトがあれば、CakePHPモデルロジックにどのように組み込むのですか? – lanan

+0

CakePHPからPerlスクリプトを実行する方法を尋ねていますか?もしそうなら、それは私の範囲外です。私はPHPスクリプトを含むことに関連して答えていました。私はPerlについて話すために、私より賢い人がいると確信しています。あなたの質問のPHPスクリプトの側面を指していたことを明確にするために私の答えを編集します。 – cspray

+0

ありがとう!私の悪い:ここに1つのポストで2つの質問....私はいくつかの未加工のSQLといくつかのPHPコード(オープン/ CSVファイルを読み取る、データベースのデータを処理するなど)を持っているプレーンなPHPで書かれたスクリプトを持って、私はフレームワークを使用することに決めました。ですから、Alterクラスのメソッドを作成してデータベースで作業し、残りのPHPスクリプトをAltersControllerに入れておく必要があります(CSVを処理して$ this-> Alter-> do_stuff();) – lanan

0

cakePHPはMVCなので、あなたが話すすべてのスクリプトをコントローラに配置する必要があります。 したがって、あなたはテーブルが呼び出されたと言うことができます: "posts" すべてのCRUD関数がモデルに含まれている必要があります。モデルへのアクセスはすべてコントローラからのものでなければなりません。基本的には、DBと会話するロジックはモデル内になければなりません。そのロジックを呼び出す関数はコントローラ内になければなりません。私は答えを編集する前に、これが私が意味していたことをよりよく説明することを願っています

+0

何かがあれば、コントローラではなく、モデルにこの機能を組み込む必要があります。モデル/テーブルに関連付けられたコントローラをセットアップする方法を知りたいが、代わりに未処理のSQLを使用してデータベース全体を更新する方法を知りたいとも思う。 – cspray

+0

cakePHPは仕事のほとんどを自動的に行うので、私はまだコントローラの機能をコントローラに置くと答えていると思います。コントローラーはモデルに何をやるべきかを伝える全体の一部です。だから、あなたが何かしたいのであれば、それをコントローラーに入れます。それは、それが実行される必要があることを、モデルに指示します。 – YonoRan

+0

はい、コントローラにコードを入れて、モデルに何をするかを伝える必要があります。しかし、あなたのコントローラは、OPが望むことをするためには、$ this-> ModelName-> model_action() 'のコード行を効果的に使うべきです。あなたの答えは、コントローラ内のすべてのビジネス/データロジックを実行する必要があることを意味しますが、これはMVCパターンを破っていると私は考えています。コントローラにデータロジックが追加されました。この同じロジックを別のコントローラで使用する必要がある場合はどうすればよいですか?私は突然、コードを複製したり、要求ごとに複数のコントローラをロードしなければならない状況に遭遇しました。 – cspray

関連する問題