1
我已经订购了一个订单,但是每个订单的多个订单(产品和总价格,数量)并不与订单一起保存。一次保存多个关联的实体Cakephp
这是现阶段的日志转储:
{ "associated": [ "Orderlines", "Payments" ], "Orderlines": [ { "total_cost": "222.44", "total_quantity": "2", "product_variants_id": "34" }, { "total_cost": "154", "total_quantity": "2", "product_variants_id": "33" } ], "users_id": 1, "usersaddress_id": 1, "orderstatus": 0, "date": "2017-09-21T01:53:38+00:00", "last_modified": "2017-09-21T01:53:38+00:00" }
控制器:
$associated = ['Orderlines', 'Payments'];
$order = $this->Orders->newEntity(['associated'=>$associated]);
if ($this->request->is('post')) {
$order = $this->Orders->patchEntity($order, $this->request->getData());
$order->users_id = $this->Auth->user('id');
//Hardcoded the SHU MART stores location because thats all thats gonna get implemented for now
$order->usersaddress_id = 1;
$order->orderstatus = 0;
$order->date = Time::now();
$order->last_modified = Time::now();
//god this is ugly. forgive me for i have sinned
$order->setDirty('users_id', true);
$order->setDirty('usersaddress_id', true);
$order->setDirty('date', true);
$order->setDirty('last_modified', true);
$order->setDirty('orderlines', true);
if ($this->Orders->save($order)) {
$this->Flash->success(__('The order has been saved.'));
return $this->redirect(['controller'=>'orderlines','action' => 'index']);
}
$this->Flash->error(__('The order could not be saved. Please, try again.'));
}
和订单项目循环内形式:
<?php
echo $this->Form->control('Orderlines.'.$orderLineIndex.'.total_cost',
['label'=>'', 'value'=>$product_total
, 'type'=>'hidden'
]);
?>
<?php
echo $this->Form->control('Orderlines.'.$orderLineIndex.'.total_quantity',
['label'=>'', 'value'=>$item['quantity']
, 'type'=>'hidden'
]);
?>
<?php
echo $this->Form->control('Orderlines.'.$orderLineIndex.'.product_variants_id',
['label'=>'', 'value'=>$item['id']
, 'type'=>'hidden'
]);
?>
现在我已经试过了没有Orderlines.
在开始,并试图单独保存每个订单,但它不会保存订单我d和东西。
我只是想能够一次性保存它。例如:
order{ id, x, y, orderlines[[0]{OL1...}[1]{OL2}] }
因此,我可以在订单中包含尽可能多的订单并将它们全部保存在一起。我想我只是缺少一个小的语法,但也许我不是。
public 'associated' =>
array (size=2)
0 => string 'Orderlines' (length=10)
1 => string 'Payments' (length=8)
public 'orderlines' =>
array (size=3)
0 =>
object(App\Model\Entity\Orderline)[349]
public 'total_cost' => float 40.28
public 'total_quantity' => int 1
public 'product_variants_id' => int 679
public '[new]' => boolean true
public '[accessible]' =>
array (size=2)
...
public '[dirty]' =>
array (size=3)
...
public '[original]' =>
array (size=0)
...
public '[virtual]' =>
array (size=0)
...
public '[errors]' =>
array (size=0)
...
public '[invalid]' =>
array (size=0)
...
public '[repository]' => string 'Orderlines' (length=10)
1 =>
object(App\Model\Entity\Orderline)[375]
public 'total_cost' => float 66
public 'total_quantity' => int 2
public 'product_variants_id' => int 55
public '[new]' => boolean true
public '[accessible]' =>
array (size=2)
...
public '[dirty]' =>
array (size=3)
...
public '[original]' =>
array (size=0)
...
public '[virtual]' =>
array (size=0)
...
public '[errors]' =>
array (size=0)
...
public '[invalid]' =>
array (size=0)
...
public '[repository]' => string 'Orderlines' (length=10)
2 =>
object(App\Model\Entity\Orderline)[347]
public 'total_cost' => float 222.44
public 'total_quantity' => int 2
public 'product_variants_id' => int 34
public '[new]' => boolean true
public '[accessible]' =>
array (size=2)
...
public '[dirty]' =>
array (size=3)
...
public '[original]' =>
array (size=0)
...
public '[virtual]' =>
array (size=0)
...
public '[errors]' =>
array (size=0)
...
public '[invalid]' =>
array (size=0)
...
public '[repository]' => string 'Orderlines' (length=10)
public 'users_id' => int 1
public 'usersaddress_id' => int 1
public 'orderstatus' => int 0
public 'date' =>
object(Cake\I18n\Time)[327]
public 'time' => string '2017-09-27T21:12:38+10:00' (length=25)
public 'timezone' => string 'Australia/Melbourne' (length=19)
public 'fixedNowTime' => boolean false
public 'last_modified' =>
object(Cake\I18n\Time)[350]
public 'time' => string '2017-09-27T21:12:38+10:00' (length=25)
public 'timezone' => string 'Australia/Melbourne' (length=19)
public 'fixedNowTime' => boolean false
public '[new]' => boolean true
public '[accessible]' =>
array (size=3)
'*' => boolean true
'id' => boolean false
'users_id' => boolean false
public '[dirty]' =>
array (size=7)
'associated' => boolean true
'orderlines' => boolean true
'users_id' => boolean true
'usersaddress_id' => boolean true
'orderstatus' => boolean true
'date' => boolean true
'last_modified' => boolean true
public '[original]' =>
array (size=1)
'orderlines' =>
array (size=3)
0 =>
object(App\Model\Entity\Orderline)[359]
...
1 =>
object(App\Model\Entity\Orderline)[372]
...
2 =>
object(App\Model\Entity\Orderline)[346]
...
public '[virtual]' =>
array (size=0)
empty
public '[errors]' =>
array (size=0)
empty
public '[invalid]' =>
array (size=0)
empty
public '[repository]' => string 'Orders' (length=6)
谢谢。
关联属性默认情况下小写,并强调除非明确配置,否则,即'Orderlines!= orderlines'。 – ndm
我担心没有工作,我做了一些改变,现在创建多个订单行实体并将其放入订单中。请找到编辑到帖子中的$ order的'var_dump'。我确定它的东西真的很少! – mewc