同じフォーム送信で、2 つの HABTM 関連モデルの新しいレコードを追加したいと考えています。
Booking と PaymentItem の 2 つのモデルがあります。この 2 つは HABTM 関係にあります。私はそれらを BookingPaymentItem モデルに結合しました (支払いを追跡するために、後の段階でこのモデルにアクセスする必要がありました)。
ブッキング テーブルのすべてのフィールドを理解することは重要ではありませんが、支払項目モデルの関連するフィールドは次のとおりです。
**payment_items - table**
id
name
description
price
**booking_payment_items**
id
booking_id
payment_item_id
quantity
したがって、[予約追加] ビューには、追加したいすべての予約フィールドがあります。ここで、フォームの送信時に、宿泊施設と保証金という 2 つの新しい支払い項目を作成する必要があります。したがって、私の考えは、いくつかの非表示フィールドを追加し、フィールドのみを表示することです: 宿泊費とデポジットの金額をユーザーに提示します。これら 2 つの新しい支払い項目は、同じく新しく作成された予約 (さらには、BookingPaymentItem エントリ) に関連付ける必要があります。
私の追加ビューでのフォーム設定は次のとおりです。
<? echo $this->Form->hidden('PaymentItem.1.id', array('value'=>$this->Text->uuid(), 'div' => false)); ?>
<? echo $this->Form->input('PaymentItem.1.price', array('label' => 'Total Tariff','div' => false)) ?>
<? echo $this->Form->hidden('PaymentItem.1.name', array('value'=>'Accommodation', 'div' => false)); ?>
<? echo $this->Form->hidden('PaymentItem.1.description', array('value'=>'Accommodation', 'div' => false)); ?>
<? echo $this->Form->hidden('PaymentItem.2.id', array('value'=>$this->Text->uuid(), 'div' => false)); ?>
<? echo $this->Form->input('PaymentItem.2.price', array('label' => false,'div' => false)); ?>
<? echo $this->Form->hidden('PaymentItem.2.name', array('value'=>'Deposit', 'div' => false)); ?>
<? echo $this->Form->hidden('PaymentItem.2.description', array('value'=>'Deposit', 'div' => false)); ?>
request->data 変数のダンプは次のとおりです。
array(
'Booking' => array(
'property_id' => 'COC1127',
'checkin' => '2013-01-23',
'checkout' => '2013-01-30',
'guest_id' => '02',
'ownervisible' => '1',
'adults' => '1',
'children' => '0',
'infants' => '0',
'deposit_due_date' => '2013-01-16'
),
'PaymentItem' => array(
(int) 1 => array(
'id' => '50f4612d-3858-4d68-9dee-0b70c2e1e283',
'price' => '1200',
'name' => 'Accommodation',
'description' => 'Accommodation'
),
(int) 2 => array(
'id' => '50f4612d-a334-4615-ba8d-0b70c2e1e283',
'price' => '400',
'name' => 'Deposit',
'description' => 'Deposit'
)
)
)
結果:
- 予約モデルは期待どおりに完全に保存されます
- 支払項目の入力が記録されていません
- 予約支払項目のエントリが記録されていません
私はこれを少しいじって、もっと救われましたが、私がしなければならないことと一致するものは何もありませんでした.
予約を追加し、2 つの支払い項目を追加し、関連する booking_payment_item エントリを ID と共に追加する必要があります。