【问题标题】:Cakephp - saving multiple checkboxes to a join tableCakephp - 将多个复选框保存到连接表
【发布时间】:2013-03-02 05:48:08
【问题描述】:

我需要有关将多个复选框保存到连接表的帮助。

有3张桌子:

  • 客户(身份证、姓名、地址)
  • 产品 (id,product_name,desc) 输入所有产品。
  • Customers_Products (id,product_id,customer_id)

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

第 2 步:
填写关于他们自己的表格(姓名、地址等)。 然后点击<Submit>按钮

第 3 步:
我将步骤 2 中的个人信息保存到客户表中,并将步骤 1 中的选定产品 ID 保存到客户_产品表中。 它确实将个人信息和产品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' => ''
    )

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

客户表: 身份证名称 1 乔恩 T 客户_产品*(加入表)* id product_id customer_id 1 4 1 2 3 1 3 5 1

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    问题是每个复选框如果通过 CakePHP 表单助手创建,也会添加一个“隐藏”输入。添加此隐藏输入以确保复选框即使未选中也始终发送值(0 或 1)。

    但是,在您的示例中,您创建了 3 个具有相同“名称”的复选框,因此每个复选框都会覆盖之前的值。

    最好的方法是使用 CakePHP formhelper 创建一个“多个”复选框;

    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

    【讨论】:

    • thaJeztah,感谢您的回复,我能够解决问题。问题在于我的表单复选框名称,复选框值未正确传递。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-20
    • 2017-05-05
    • 2021-12-07
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多