2013-07-27 3 views
9

私はLaravelをしばらく見ていましたが、ついにそれを拾うことにしました。 MVCフレームワークを使ったのは初めてのことですが、モデルの目的を掴むのに苦労しています。Laravel 4モデル、使い方

私は、初心者ガイドをたくさん読んでいると、これは、かなりの(賢明Laravel)彼らのモデルであることすべて

class Model extends Eloquent { 

} 

そして、そのコントローラに、彼らはこのような何かを、

です
$model = new Model; 
$model->text = "text"; 
$model->save(); 

私はMVCパターン(おそらくそこで最大の初心者)の専門家ではありませんが、全体的なポイント(または少なくとも小さなポイント)は多くのアクションを分離することだと思いました。そして、このモデルは、すべてのDBを扱う責任があると考えられていました。だから、ある意味では、これは私にとっては間違っているようで、少なくともベストプラクティスではないようです。

しかし、たくさんの関数を設定すると、テーブルごとに1つのモデルがあるという問題が発生します。もう一度、正しいとは思わない。だから、モデルをある意味で曖昧にする必要があります。それは任意のテーブルに対して任意のアクションを取ることができるという意味で?

現時点では、私にとってはまったく混乱しているようです。

答えて

14

eveyテーブルのモデルが必要です。共有することができないモデル(列名や検証など)に関連するものがありますが、繰り返していると思われる場合は、BaseModelを作成してでも、すべてのメソッドまたはそれで雄弁メソッドをオーバーロード:

class BaseModel extends Eloquent { 

    public function whatever() { 

    } 

    public function save(array $options = []) { 
     // do what you need to do 
     parent::save(); 
    } 

} 

は、次にそれを使用してモデルを作成:

class Order extends BaseModel { 

} 

しかし、あなたのモデルとテーブル名はLaravelを以下の場合は、モデルに多くを必要としませんパターン(この場合、テーブル名は 'order s ')、テーブルのためにモデルを動作させるには、この単純な宣言が必要です。

編集:

コントローラがビューにモデルからデータを転送するために、彼らはあなたのデータについてはあまり知らない、それらについてのほとんどすべてを意味している必要がありますあなたのモデルで嘘(「脂肪モデル、スキニーコントローラ")ので、彼らは"制御 "を持っているだけ知る必要があります。

class OrdersController extends BaseController { 

    public function process() 
    { 
     $order = Order::find(Input::get('orderId'))->process(); 

     return View::make('orders.showProcessedOrder')->with('order',$order); 
    } 

} 
+0

偉大な答え!そして、私が最初に意味していたことについて少し詳しく説明するために、idの値が1の行を取得したい場合は、Model :: find(1);を実行します。私のコントローラでは、それは実際にはコントローラでそれを行うのではなく、コントローラにその結果を返す機能に "見つける"を配置するために(その用語を緩く使用する)ベストプラクティスですか?この場合、より大きなものを考えるならそれはそうではないかもしれません。 – Andreas

+0

ちょうど何かの答えで編集しました。 –

+0

しかし、あなたは実際に正しいです。彼らはデータソースとアダプタを忘れていました。だからこそ、データベースごとに検証と関係性を何百万回も書き直さなければならないと考えるかもしれません。違います。まったく。 ...そして、この魔法の涅槃はLaravelでも可能ですが、あなた自身ですべてのことを繋ぐことが大切です。その価値はありますか?またはあなたは組織解体に加入しますか?あなた次第ですが、私は元の質問が良かったと思います。あなたは初心者であろうとなかろうと、あなたは良いデザインを考えています。 – Tom

-1

モデルは、データベーステーブルの周りのラッパーです(実際にアプリケーションを作成しているものです)。それらはデータを格納するためのオブジェクト指向のコードベースのインタフェースを提供し、データ固有のロジックをモデルに入れることができます。 OOPはすべてクラスとオブジェクトに関するもので、入ってくるHTTPリクエストやデータストレージのようなものをそのフォームに変換します。

あなたの質問は良いです。プレゼンテーション層、リレーショナルデータベースに格納されたデータを持つビジネスロジックレイヤー、データストレージレイヤーなど、3層のWebアプリケーションを使用してWebアプリケーションを作成する方法を学ぶと、大きな効果があります。コード内にデータベース関連のものが追加されています。

Antonioが書いたように、MVCプログラミングでは、「脂肪モデル、スキニーコントローラ」があなたのために働いています。コントローラは理想的には、受信したリクエストを検証したり、データベースに追加したりできる正しいモデルに渡すコードのほんの2行でなければなりません(しかし、最初にコントローラに入れておくのが最も簡単ですMVCを学習/想起する。)