我想为产品保存多个类别。
我有模特:
Category.php
public $hasAndBelongsToMany = array(
'Product' => array(
'className' => 'Product',
'joinTable' => 'product_categories',
'foreignKey' => 'category_id',
'associationForeignKey' => 'product_id',
'unique' => 'keepExisting',
)
);
Product.php
public $hasMany = array(
'ProductCategory' => array(
'className' => 'ProductCategory',
'foreignKey' => 'product_id',
'dependent' => false,
),
ProductCategory.php
public $belongsTo = array(
'Product' => array(
'className' => 'Product',
'foreignKey' => 'product_id',
),
'Category' => array(
'className' => 'Category',
'foreignKey' => 'category_id',
)
);
因此,在产品/添加视图中,我按以下方式添加了一组类别的复选框:
echo $this->Form->input('ProductCategory.category_id',array(
'label' => __('Category',true),
'type' => 'select',
'multiple' => 'checkbox',
'options' => $categories
));
但是这会产生一组输入,其名称为:name="data[ProductCategory][category_id][]"
而不是name="data[ProductCategory][0][category_id]"
零增加。
如果它们的格式是模型和字段之间的键,那么我可以使用saveAll()吗? 由于它是我得到的格式,我将不得不操纵请求 - >数据,以使其成为我希望能够保存的形式()
我是否以正确的方式进行此操作?或者我的模型设置不正确?
此外,编辑hasMany数据会发生什么?如果我取消选中一个选项并添加另一个选项怎么办?蛋糕会在添加新记录之前自动删除所有相关记录吗?
EDIT。
基本上我要问的是有更好或更快的方式来做到这一点,现在可行:
if ($this->Product->save($this->request->data)) {
$this->Product->ProductCategory->deleteAll(array('ProductCategory.product_id' => $this->Product->id));
foreach ($this->request->data['ProductCategory']['category_id'] as $cat_id) {
$this->Product->ProductCategory->create();
$this->Product->ProductCategory->set(array(
'product_id' => $this->Product->id,
'category_id' => $cat_id
));
$this->Product->ProductCategory->save();
}
}
答案 0 :(得分:1)
在你的表单中迭代,但是你希望按照
的行显示许多for/while/do()
{
$counter++
$this->Form->text('Product.'.$counter.'.price');
$this->Form->text('Product.'.$counter.'.description');
}
答案 1 :(得分:0)
我会使用saveAll()
,因为它是为了自动保存记录及其所有相关记录,假设您的ID在数据中并且格式正确。