2016-05-21 9 views
1

私はこれが重複質問です知っているが、私はテーブルのリレーションシップのこれらの種類を持って同様のアプリがたくさんあるので、それが他人を助けるだろうと思う:laravel 5.2単一のテーブルごとにモデルとコントローラが必要ですか?

enter image description here

そこで質問が最適であるものですEloquentを使用して、このスキーマのすべての関係のためのソリューション? いくつのモデルとコントローラを作るのですか?

答えて

4

まず、データベース内のすべてのテーブルがエンティティを表すわけではないことを理解する必要があります。

例えば、users,posts,commentsなどの表は、エンティティです。一方、posts_users,comments_postsは、2つのエンティティ間の関係を具体化するために技術的理由からここにあります。

エンティティのみがモデルを必要とします:リレーションテーブルのモデルを持つことは意味がありません。

テーブルにdate_createdのような情報が入っていても、それをエンティティにすることはできません。これは単に関係に関連するデータです。たとえば、テーブルusers_rolesには、与えられたユーザに与えられたロールがいつ割り当てられたかを知るために、date_assignedというカラムがあります。それはすべてのことの権利ではありません。

第2に、コントローラの目的を理解する必要があります。コントローラの役割は、要求を処理して結果を提供することです。結果はビュー、enエラー(HTTP 404)、またはアクションが正常に完了したという事実だけです。

また、Controller(またはこの基本クラスを拡張する子)と実際のコントロールとの違いを作らなければなりません。実際のコントローラは、要求を処理するコードです。 Controllerクラスは、要求を処理する複数のメソッドを持つことができます。

これはすべての問題です。通常、コントローラクラスは、同じスコープ内でメソッドをグループ化するために使用されます。ユーザーログイン、ログアウト、サブスクリプション、パスワードのリマインダーはすべて同じスコープです。これらのコントローラはすべて、異なるクラスまたは機能を持つことができます。どうでもいい。それぞれの方法はコントローラです。彼らは同じ要望を持っているので(ユーザーがログインしているかどうか、ログインが必要かどうか、サブスクリプションページを表示できるかどうかなど)、同じクラスにグループ分けされています。あなたはそれを考えます。それはちょうど論理的なものです:あなたが(たとえあなたがプロジェクトで新規であっても)ユーザーの身元確認について何かを変更する必要があるときに、どこを検索するべきかを知っています。

ですから、これらのエンティティのためのモデルが必要です。

  • ユーザー
  • オファー
  • 請求書
  • カテゴリー

あなたが必要とするコントローラは、あなたが望むものに依存します/このデータを使用する必要があります。あなたの質問のこの部分にはすぐに使える答えはありません。

用コントローラクラスを使用します(あなたには、いくつかを必要とする場合)ユーザ認証

  • ユーザー管理(バックオフィス)
  • 請求書の管理など(編集、有給マーク、支払い遅延のリスト、
    • カテゴリ管理(削除、作成、編集)
    • は、管理
    を提供しています

    あなたのアプリケーションによっては、もっと必要な場合があります。あなただけが本当に言うことができます。この質問に悪い答えはありません。より良い組織化のためにいくつかのコントローラを分離する必要があると思うなら、それをしてください。 2つ以上をグループ化する必要があると思われる場合は、それを行います。ルールはありません。コードを明確かつ整理しておく必要があります。あなたのニーズに合っていなければなりません。それで全部です。

  • +0

    テーブルinvoice_detailsとoffer_detailsについてはどうすればいいですか?モデルは必要ですか? – lewis4u

    +0

    いいえ、エンティティではないためです。 Laravelを使うと、冗長な 'withPivot()'メソッドを使ってピボットテーブルのカラムにアクセスすることができます。 – Arcesilas

    +0

    ああ、私は今それを得る... – lewis4u

    関連する問題