2011-02-05 21 views
1

どのモデルのレコードを参照するのに最も便利な「標準」方法は何ですか?Yii:複数のテーブルの行を参照する最も良い方法は?

私は、ユーザーがサイトの別のアイテムにリンクするメニューアイテムを作成できるメニューシステムを構築しようとしています。明らかに、ユーザは様々なタイプのコンテンツ(モデル)にリンクすることができる。私はより柔軟性を与えるために内部参照としてURLを使用せずにこれを動作させるだろう。

だから、「統一主キー」

私はどちらかのすべてのモデルを考えていたのいくつかの並べ替え怒鳴るのコメントで述べたように、そのthis questionのようにベースモデルとリファレンスの拡張です。または、参照できるモデルごとに個別のフィールドを設定するだけです。何をしようとする

多分それを行うための別の方法は、フィールドでのモデルとレコードIDを保存してからちょうどリレーショナル「魔法」アクティブレコードを上書きするだろう

+0

申し訳ありませんが、この質問は私を完全に混乱させます。あなたは何を達成しようとしていますか?私はあなたが多形性協会のようなものについて話していると思いますか?基本的な「オブジェクト」モデルや「物」モデルを持ち、製品、ユーザー、投稿のいずれであっても、これらの「物」を同じ方法で簡単に参照したい場合は、統一された主キーまたは何かのように? – thaddeusmt

+0

申し訳ありませんが、他の人に関連する質問をするために少し警告が現れました(言葉を思い出すことはできません)。うまくいけばそれを今の文脈に入れてください。 まあまあです。 drupalを使用しなければならない場合は、すべてのコンテンツがノードであるノードシステムがあります。各コンテンツにはタイプがあり、追加のフィールドを持つことができます。私の問題を回避する最善の方法は、このようなことをすることだと思います –

答えて

1

は、タフな問題の一種でありますmySqlはOOPの継承ではなくFirst First Formの関係のみをサポートするためです。これを「多型関連」といいます。しかし、いくつかの解決策があります。 SOそれらのいくつかを説明した答えは本当に良いがここで見つけることができます:

Possible to do a MySQL foreign key to one of two possible tables?

一つの可能​​な解決策の例(上記のリンクに記載されている二つ目は、私は思う)のYiiは、シングルを持っているかもしれないと」 「タイプ」フィールドを持つ「オブジェクト」テーブルを作成し、他のタイプの「オブジェクト」に必要なフィールドでテーブルを区切ります。次に、基本オブジェクトモデルのafterFind()メソッドで、型フィールドを見て、型テーブルの列にアクセスできる型をBehaviorsに追加します。

また、リンクやショートURLを簡単に作成したい場合は、基本的にオブジェクトへのリンクを簡単にするフレームワークにいくつかの追加機能を書くことができます。通常のようにすべてのオブジェクトタイプに対して別々のモデルを用意しますが、個々のタイプに関係するマスターの主キー(またはURLスラッグ)を持つ中央テーブルがあります。 createUrl()をオーバーライドして(コンテンツタイプに関係なく)マスターキーを取得し、マスターテーブルで使用するモデル/コントローラを検索して正しいリンクを構築するだけです。

これは、DrupalのURLエイリアスが許可するものです。 Drupal CCKのようなシステムを再現するより簡単です!あなたが本当に将来的にコンテンツを変更する柔軟性を必要としない限り、どちらの場合も不要になります。

関連する問題