0

複数のチェックボックスを結合テーブルに保存する方法を教えてください。

3 つのテーブルがあります。

  • 顧客(ID、名前、住所)
  • 商品(id,product_name,desc) すべての商品が入ります。
  • Customers_Products (id,product_id,customer_id) <-(結合テーブル)

ステップ 1:
顧客は希望の製品(リンゴ、オレンジ、チェリーのチェックボックス)<Next>を選択し、ボタン をクリックします。

ステップ 2:
フォームに自分自身(名前、住所など) を記入します。<Submit>ボタン をクリックします

ステップ 3:
ステップ 2 の個人情報を Customers テーブルに保存し、ステップ 1 で選択した製品 ID を 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' => ''
    )

望ましい結果: 次の順序でデータを保存したい:

顧客テーブル:
ID名
1 ジョン T

Customers_Products *(結合テーブル)*
id product_id customer_id
1 4 1
2 3 1
3 5 1
4

1 に答える 1

0

問題は、CakePHP フォームヘルパーを介して作成された場合、各チェックボックスも「隠し」入力を追加することです。この隠し入力は、チェックボックスがチェックされていなくても、チェックボックスが常に値 (0 または 1) を送信するようにするために追加されています。

ただし、あなたの例では、同じ「名前」で 3 つのチェックボックスを作成しているため、各チェックボックスは前の値を上書きします。

最善の方法は、CakePHP フォームヘルパーで「複数」チェックボックスを作成することです。

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

これが正しく機能するには、$products製品 ID とラベルを含む viewVar が必要です。

コントローラーの内部:

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

あなたの関係はhasAndBelongsToではないでしょCustomerうか?ProductCustomerProduct

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

于 2013-03-01T21:48:08.250 に答える