0

我有一个模型'Catgeory',它与自身有 HABTM 关系

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' => ''
        )
    );

现在这意味着关系得到了正确保存,但是,我认为这种关系是错误的,因为当我找到所有类别时,孩子们不再出现在结果中。

有什么想法我哪里出错了吗?我保存错了吗?我需要创建模型子类别吗?

4

1 回答 1

0

我认为你不应该使用 HABTM 关系——但这只是一种意见。

一个类别可能有许多子类别,因此类别模型必须具有 hasMany 关系,该关系使用外键链接到同一个表parent_id

子类别始终只有一个父类别(不是吗?),因此可以创建具有关系 belongsTo 的模型。

这样,您可以轻松地将类别和子类别保存在一起,并准确检索您需要的内容。这样,您还可以摆脱 HABTM 所需的关系表,只在类别表中使用另一列名为 parent_id 或其他东西:)

于 2013-05-09T10:19:55.187 回答