【发布时间】:2017-01-27 20:52:41
【问题描述】:
我执行查找以检索一个实体并包含其关联实体之一,其中它有很多。
检索到的数据简单来说是这样的:
object(App\Model\Entity\Order) {
'id' => '67839',
'price' => (int) 100,
'payment_instalments' => [
(int) 0 => object(Cake\ORM\Entity) {
'id' => (int) 43150,
'order_id' => '67839',
'amount' => (int) 100
}
]
}
我想手动修改主实体上的字段和包含实体上的字段。
我可以像这样轻松修改主要实体:
$order = $orders->patchEntity($order, [
'price' => 200
]);
我能找到修改包含实体的唯一方法是对其执行单独的补丁。这可以通过多种方式完成。这是一个:
$instalments = TableRegistry::get('PaymentInstalments');
$instalment = $order->payment_instalments[0];
$order->payment_instalments[0] = $instalments->patchEntity(instalment , [
'amount' => 200
]);
那我要全部保存:
$orders->save($order, ['associated' => 'PaymentInstalments']);
问题是相关数据没有保存,原因是$order->payment_instalments 没有被标记为“脏”,因为它是单独修补的。所以我找到的唯一解决方案是手动将其标记为脏:
$order->dirty('payment_instalments', true);
然后保存将起作用。
这对我来说似乎很混乱,如果我必须修补多个包含的实体,会变得更加混乱。我在任何地方都找不到有关如何正确/优雅地完成此操作的任何文档或帮助。
有没有办法一次性修改主实体和包含的实体,并让它自动识别包含的数据是脏的?
【问题讨论】:
标签: php cakephp cakephp-3.0