2

まず、私がORMの初心者であることを伝えたいと思います。私は人生でORMを使用したことがなく、Codeigniterを使用しているときに、DatamapperOverzealousEditionが役立つと信じているクレイジーで高度な関係を実行する必要があるという日々の開発の段階に達しました。

私のデータベースには、次のテーブルがあります。

ユーザー
プロジェクト
クライアント
タスク

これがテーブル間の私の望ましい関係です。

  • ユーザーは多くのプロジェクトに所属できます。
  • プロジェクトには複数のタスクを含めることができますが、クライアントを1つだけ持つことができます。
  • クライアントは多くのユーザーを持つことができ、多くのプロジェクトを持つことができます
  • タスクは1つのプロジェクトのみを持つことができます

ドキュメントに記載されているように、モデルディレクトリにモデルを設定しようとしましたが、最後にsが付いていないモデル名なので、ユーザーにはuser.phpモデルなどがあります。

ドキュメントが素晴らしいことは知っていますが、明らかに非常に簡単であるにもかかわらず、正しく理解できないようです。たとえば$u= new User();を実行して、モデルをインスタンス化することを知っています。コントローラの内部ですが、私の質問はモデルの内部で関係を設定することです。

上記の関係を持つようにモデルを設定するにはどうすればよいですか。たとえば、タスクをフェッチするときに、タスクが属するプロジェクトと、関連するデータベーステーブルからの情報のヒープ全体を確認できます。

ドキュメントでは、プロジェクトモデル内で次のように使用していることに気付きました。これは、プロジェクトに複数のタスクを含めることができることを示しているはずです。 var $has_many = array('task')

それだけですか?$has_many変数と$has_one変数を定義し、関連するモデル名を配列に入れるのと同じくらい簡単ですか?

4

2 に答える 2

1

私はこの特定のORMを使用したことはありませんが、Doctrineを使用しています。使用しているものがほとんど同じように機能する場合、あなたの質問に対する簡単な答えは-はい!Doctrineを使用すると、モデルクラスにすべての関係を設定できます。その後、ORMがすべてを管理します。したがって、たとえば、新しいタスクオブジェクトをインスタンス化する場合... $ task = new Task(); 次に、$ task-> Projectと書くだけで、Projectテーブルとの関係にアクセスできます。

上記のコードはdatamapper用に記述されていないため、そのままでは機能しない可能性があることを強調する必要がありますが、問題が解決されることを願っています。ドキュメントを理解しているように聞こえますが、信じてはいけません!!!!

于 2010-08-17T06:27:37.860 に答える
0

データベース構造がDatamapperOverzealousで期待されるレイアウトに適合している限り、これですべてです。

私は自分が構築しているプロジェクトでこのORMを使用しており、ほとんどの場合、非常に役立ち、時間を節約できました。

于 2010-08-17T20:24:10.790 に答える