次のモデルがあるとします。
Order hasMany OrderLine (OrderLine belongsTo Order)
OrderLine hasOne Product (Product belongsTo OrderLine)
各 OrderLine が 1 つの Product を持つ多くの OrderLines を持つ新しい Order を保存したいと考えています。例: ユーザーが「PS3」と「XBOX」を購入したい場合、データベースは次のようになります。
orders
+----+-------- +
| id | user_id |
+--------------+
| 1 | 10 |
orders_line
+------+----------+------------+
| id | order_id | product_id |
+-----------------+------------+
| 100 | 1 | 1001 |
| 101 | 1 | 1002 |
products
+-------+------+
| id | name | ...
+--------------+
| 1001 | PS3 |
| 1002 | BOX |
Order と OrderLines を保存できますsaveAll
OrdersController.php
public function add() {
if ($this->request->isPost()) {
$this->Order->create();
$this->request->data['Order']['user_id'] = $this->Auth->user('id');
$this->Order->saveAll($this->request->data);
}
}
それはうまくいきます。しかし、製品要素を保存する方法がわかりません。
私のフォーム:
<form ...>
<div id="order-lines">
<div>
<input name="data[OrderLine][0][user_id]" type="hidden">
<div class="span3">
<label>myfield/label>
<input name="data[Product][0][myfield]" type="text" id="Product0Myfield">
</div>
<div>
<label>fieldb</label>
<input name="data[Product][0][fieldb]" type="text" id="Product0Fieldb">
</div>
<div>
<input name="data[OrderLine][1][id]" type="hidden">
<div>
<input name="data[Product][1][id]" type="hidden">
<label>myfield</label>
<input name="data[Product][1][myfield]" type="text" id="Product1Myfield">
</div>
<div class="span3">
<label>fieldb</label>
<input name="data[Product][1][fieldb]" type="text" id="Product1Fieldb">
</div>
</div>
</div>
</form>
私はこれを試しました:
foreach ($this->request->data['OrderLine'] as &$orderLine) {
// create the product and populate it with form data
$this->Product->create();
$this->Product->save($this->request->data);
// trying to update the OrderLine foreign key
$orderLine['product_id'] = $this->Product->id; // doesn't works
}
どんな助けでも大歓迎です。