我需要帮助将多个复选框保存到连接表。
共有3个表格:
第1步:
客户选择所需的产品(复选框中的苹果,橙子,樱桃)
然后点击<Next>
按钮
第2步:
填写关于他们自己的表格(姓名,地址等)。
然后点击<Submit>
按钮
第3步:
我正在将步骤2中的个人信息保存到Customers表,并将选定的产品ID从步骤1保存到Customers_Products表。
它确实将个人信息和产品ID保存到指定的表中,但是当客户选择多个产品时,它不会保存产品ID。
它添加了行,但产品ID字段为空。
以下是我的观点:
<?php echo $this->Form->checkbox('CustomerProduct.product.', array('value' => '1', 'style' => 'float: left; display: inline')); ?>
<?php echo $this->Form->checkbox('CustomerProduct.product.', array('value' => '2', 'style' => 'float: left; display: inline')); ?>
<?php echo $this->Form->checkbox('CustomerProduct.product.', array('value' => '3', 'style' => 'float: left; display: inline')); ?>
<?php echo $this->Form->input('Customers.name', array('value'=>'Jon Toshmatov')); ?>
控制器:
$this->Prospect->saveAll($this->request->data);
型号:
public $hasAndBelongsToMany = array(
'CustomerProduct' => array(
'className' => 'CustomerProduct',
'joinTable' => 'customers_products',
'foreignKey' => 'customer_id',
'associationForeignKey' => 'product_id',
'unique' => 'false',
'dependent' => false,
'conditions' => '',
'fields' => '',
'order' => '',
'limit' => '',
'offset' => '',
'exclusive' => '',
'finderQuery' => '',
'counterQuery' => ''
)
期望的结果: 我想按以下顺序保存数据:
Customers table: id name 1 Jon T Customers_Products *(join table)* id product_id customer_id 1 4 1 2 3 1 3 5 1
答案 0 :(得分:0)
问题是如果通过CakePHP formhelper创建,每个复选框也会添加一个“隐藏”输入。添加此隐藏输入以确保复选框始终发送值(0或1),即使未选中它们也是如此。
但是,在您的示例中,您创建了3个具有相同“名称”的复选框,因此每个复选框都会覆盖以前的值。
最好的方法是使用CakePHP formhelper创建一个“多个”复选框;
echo $this->Form->input('Product', array('multiple' => 'checkbox'));
为了使其正常工作,应该有$products
viewVar,其中包含product-ID和标签;
在你的控制器内:
public function some_action()
{
// your code here
$this->set('products', $this->Customer->Product->find('list'));
}
更多关于在此保存HABTM数据的信息; http://book.cakephp.org/2.0/en/models/saving-your-data.html#saving-related-model-data-habtm
注意强>
除非您为模型使用非标准名称,否则您的hasAndBelongsToMany
似乎不正确;
我怀疑你的关系是Customer
hasAndBelongsTo Product
,而不是CustomerProduct
?