0

私は2つのモデルを持っています:StoreReview。私のサイトのユーザーは、ストアにレビューを残すことができます。私のデータベースにはreviews_stores、レビューをストアに関連付ける結合テーブルがあります。

モデルをリンクするにはどうすればよいですか?私はaStoreがhaveManyReviewであり、aReviewがに属していると想定していますが、CakePHPは私のテーブルに。という列があるStoreと想定しているため、結合テーブルがCakePHPで問題を引き起こしています。reviewsstore_id

結合テーブルを使用している理由は、サイトの多くの部分を確認できるためです。たとえば、ブランド。新しいレコードが作成され、2つのレコードを関連付けるためにReviewレコードがテーブルに挿入されます。brands_reviews

どんな助けでも大歓迎です。

4

3 に答える 3

1

1つのレビューモデルと、フィールド「foreign_key」と別のフィールド「model」を持つレビューテーブルを単純に使用しないのはなぜですか。これにより、テーブルを複製したり、モデルを継承または複製したりする必要がなくなります。これにより、結合テーブルも不要になります。

dbデザインを引き続き使用する場合は、hasManyアソシエーションよりもHABTMアソシエーションを使用する必要があります。ただし、それを結合可能に保ちたい場合でも、foreign_key / modelを使用して、1つの結合テーブルと1つのレビューテーブルを作成することができます。

ちなみに、結合テーブルreview_storeは規則に従っていないため、reviews_storesである必要があります。ただし、brands_reviewsに使用したスキーマとは異なります。;)

于 2012-04-26T01:23:00.533 に答える
0

私には、それは多対多の関係ではなく、グループ化された1対多の関係であるように思われます。Idは結合テーブルを失い、レビューが属する「グループ」の概要を示す追加のテーブルがあります。したがって、レビューテーブルには、review_id、link_id(関連するブランドまたはストアの外部キー)、review_type_id(レビューがブランドまたはストアのどちらであるかを示す外部キーなど)が含まれます。その場合、review_typeテーブルにはreview_type_id、review_type(varchar)のみが必要です。

于 2012-04-26T06:40:29.590 に答える
0

レビューできる各モデルのすべての結合テーブルは必要ありません。モデル名自体をReviewテーブルのフィールドに格納するだけです。

次のように関係を設定します。

class Store extends AppModel {
    public $hasMany = array(
        'Review' => array('conditions' => array('Review.model' => 'Store')
     );
}

その後、データベースに触れることなく、必要な数の追加モデルを使用してこれを行うことができます。

于 2012-04-26T08:25:24.713 に答える