ฉันทำการค้นหาเพื่อดึงข้อมูลเอนทิตีหนึ่งรายการและมีหนึ่งในเอนทิตีที่เกี่ยวข้องซึ่งมีหลายเอนทิตี
ข้อมูลที่ดึงมามีลักษณะเช่นนี้ในแง่ง่ายๆ:
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);
จากนั้นการบันทึกจะทำงาน
สิ่งนี้ดูค่อนข้างยุ่งสำหรับฉัน และคงจะยุ่งกว่านี้มากหากฉันต้องแพตช์เอนทิตีที่มีอยู่หลายรายการ ฉันไม่พบเอกสารหรือความช่วยเหลือใด ๆ เกี่ยวกับวิธีดำเนินการอย่างถูกต้อง/หรูหรา
มีวิธีแก้ไขทั้งเอนทิตีหลักและเอนทิตีที่มีอยู่ในครั้งเดียว และทำให้ระบบรับรู้โดยอัตโนมัติว่าข้อมูลที่มีอยู่สกปรกหรือไม่