Saya melakukan pencarian untuk mengambil satu entitas dan memuat salah satu entitas terkaitnya, yang memiliki Banyak.
Data yang diambil terlihat seperti ini secara sederhana:
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
}
]
}
Saya ingin mengubah kolom pada entitas utama dan kolom pada entitas tertampung secara manual.
Saya dapat memodifikasi entitas utama dengan mudah seperti ini:
$order = $orders->patchEntity($order, [
'price' => 200
]);
Satu-satunya cara saya dapat memodifikasi entitas yang ada di dalamnya adalah dengan melakukan tambalan terpisah padanya. Hal ini dapat dilakukan dengan berbagai cara. Ini salah satunya:
$instalments = TableRegistry::get('PaymentInstalments');
$instalment = $order->payment_instalments[0];
$order->payment_instalments[0] = $instalments->patchEntity(instalment , [
'amount' => 200
]);
Lalu saya ingin menyimpan semua:
$orders->save($order, ['associated' => 'PaymentInstalments']);
Masalahnya adalah data terkait tidak disimpan, dan alasannya adalah karena $order->payment_instalments
tidak ditandai sebagai "kotor" karena ditambal secara terpisah. Jadi satu-satunya solusi yang saya temukan adalah menandainya secara manual sebagai kotor:
$order->dirty('payment_instalments', true);
Maka penyelamatan akan berhasil.
Ini tampaknya cukup berantakan bagi saya, dan akan menjadi jauh lebih berantakan jika saya harus menambal beberapa entitas yang ada di dalamnya. Saya tidak dapat menemukan dokumentasi atau bantuan apa pun tentang bagaimana hal ini seharusnya dilakukan dengan benar/elegan.
Apakah ada cara untuk memodifikasi entitas utama dan entitas tertampung sekaligus, dan membuatnya secara otomatis mengenali bahwa data tertampung itu kotor?