0

それ自体と HABTM 関係を持つモデル 'Catgeory' があります

public $hasAndBelongsToMany = array(
        'SubCategory' => array(
            'className' => 'Category',
            'joinTable' => 'categories_subcategories',
            'foreignKey' => 'category_id',
            'associationForeignKey' => 'subcategory_id',
            'unique' => 'keepExisting',
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        )
    );

これは、カテゴリを保存するために使用しているコードです。このカテゴリを親 ($id) の子にして、関係を作成したい

$this->Category->create();
$c["Category"]["title"] = $this->request->data["title"];
$c["SubCategory"]["CategoriesSubcategory"]["category_id"] = $id;

構造は私には正しいように見えますが、これは関係を作成しません。ただし、使用して関係を作成しようとすると

$c["SubCategory"]["CategoriesSubcategory"]["subcategory_id"] = $id;

これは機能しますが、親と子は逆です。したがって、これは、foreignKey と associationForeignKey が間違っていることを示唆しています。だから私は私の関係でそれらを変えました:

public $hasAndBelongsToMany = array(
        'SubCategory' => array(
            'className' => 'Category',
            'joinTable' => 'categories_subcategories',
            'foreignKey' => 'subcategory_id',
            'associationForeignKey' => 'category_id',
            'unique' => 'keepExisting',
            'conditions' => '',
            'fields' => '',
            'order' => '',
            'limit' => '',
            'offset' => '',
            'finderQuery' => '',
            'deleteQuery' => '',
            'insertQuery' => ''
        )
    );

これは、関係が適切に保存されることを意味しますが、すべてのカテゴリを見つけると、子が結果に表示されなくなるため、この関係は間違った方法であると思います。

私が間違っているアイデアはありますか?何か間違って保存していますか?モデル SubCategory を作成する必要がありますか?

4

1 に答える 1

0

HABTM 関係を使用するべきではないと思いますが、これは単なる意見です。

カテゴリには多くのサブカテゴリが含まれる場合があるため、カテゴリ モデルには、外部キーで同じテーブルにリンクする hasMany 関係が必要parent_idです。

サブカテゴリには常に 1 つの親しかありません (そうではありませんか?) ため、属している関係でモデルを作成できます。

このようにして、カテゴリとサブカテゴリをまとめて簡単に保存し、必要なものを正確に取得することもできます. このようにして、HABTM に必要な関係テーブルも取り除き、parent_id などの名前のカテゴリ テーブルの別の列だけを使用します :)

于 2013-05-09T10:19:55.187 に答える