質問

私はCakePHPが比較的新しく、現在AuthorモデルとBookモデルを持っているCakePHPアプリケーションを書いています。著者と本はどちらも多対多の関係にあります。
ただし、著者と書籍の関係ごとに、その著者のブログへの対応リンクを追加し、その書籍を書いた経験を反映させたいと思います。

それがわかりにくい場合は、次の段落で私の状況をより明確にするために詳しく説明します。

すべての著者について、各本の経験に関する記事が1つあります。この関係を逆に見ると、これは、すべての本について、著者ごとに1つの対応するリンクが存在することを意味します(本に複数の著者がいる場合)。その著者は本を書いた経験を説明します。

つまり、すべての単一の(著者、書籍)のペアに対して、関連するURLを保存できるようにしたいと思います。

恐ろしく不適切に使用する、より派手な抽象数学用語では、すべての頂点が作者または本であり、すべてのエッジが1つの頂点の作者と他の頂点の本を持つ無向グラフを持っています。それはちょっと紛らわしいように聞こえますが、(私が思うに)それは私の状況をできる限り正確に説明しています。
上記の説明から、任意のデータをその関係の任意のエッジに付加して、後で取得できるかどうかを知りたいです。

現在、グラフエッジとして機能するAuthorBookという3番目のモデルがあります。
AuthorはAuthorBookとhasManyの関係にあります。
BookはAuthorBookとhasManyの関係にあります。
AuthorBookにはAuthorおよびBookとのbelongsTo関係があり、さらにurlフィールドがあります。

この解決策は機能しますが、何らかの理由でBookがAuthorに直接接続されていないという事実に悩まされています。 AuthorBookモデルを写真から切り取りながら、この同じ効果を達成する方法はありますか?

(また、AuthorBookを保持している間、それらを直接関連付けることができることを認識していますが、それは見苦しく、冗長でもあります。)

(また、私はまだauthor_book SQLテーブルを持っていることに気づきます。これは少しも気にしません。とにかくなくしては不可能だと思います。)

お時間をいただきありがとうございます!そして、私に火をつけないでください!!!

役に立ちましたか?

解決

はい、AuthorBookのリレーションシップ(または、想定する「エッジ」)をモデル化できます。

class Author extends AppModel {
    ...
    $hasAndBelongsToMany = array('Book', array('with' => 'AuthorBook'));
    ....
}

" with " habtmオプション:

  

結合テーブルのモデルの名前を定義します。デフォルトでは、CakePHPはモデルを自動作成します。上記の例を使用すると、 RecipesTag と呼ばれます。このキーを使用すると、このデフォルト名をオーバーライドできます。結合テーブルモデルは、通常の「通常の」モデルと同じように使用できます。結合テーブルに直接アクセスするモデル。

これは、through "と同等です。 .png "rel =" noreferrer ">この図

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top