将多个复选框保存到连接表中


Cakesaving multiple checkboxes to a join table

我需要帮助保存多个复选框到一个连接表。

有3个表:

  • (id、名称、地址)
  • Products (id,product_name,desc)输入所有产品。
  • Customers_Products (id,product_id,customer_id) <-(join table)

步骤1:
客户选择所需产品(复选框中的苹果、橙子、樱桃),点击<Next>按钮

步骤2:
填写关于自己的表单(姓名,地址等)。点击<Submit>按钮

步骤3:
我将个人信息从步骤2保存到Customers表,并将选择的产品id从步骤1保存到Customers_Products表。它将个人信息和产品id保存到指定的表中,但是当客户选择多个产品时,它不保存产品id。它添加了行,但product 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' => ''
    )

期望结果:我想按以下顺序保存数据:

<>之前用户表:身份证的名字1 Jon TCustomers_Products *(连接表)*Id product_id customer_id1 4 12 3 13 5 1

问题是,如果通过CakePHP表单帮助器创建,每个复选框也将添加一个'隐藏'输入。添加这个隐藏输入是为了确保复选框总是发送一个值(0或1),即使它们没有被选中。

但是,在您的示例中,您创建了3个具有相同'name'的复选框,因此每个复选框将覆盖前一个值。

最好的方法是使用CakePHP表单帮助器创建一个'multiple'复选框;

echo $this->Form->input('Product', array('multiple' => 'checkbox'));

为了使其正常工作,应该有一个$products viewVar,包含产品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 ?

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html hasandbelongstomany-habtm