ฉันต้องการบันทึกค่าใหม่ให้กับเขตข้อมูลบนเอนทิตีและฉันสงสัยว่ามันเป็นไปได้ที่จะใช้เอนทิตีเมทาทาทาฐานที่ตั้งหรือมันเป็นไปได้เพียงเพื่อตั้งค่าที่มีอยู่?
$wrapper->vimn_related_subjects[] = $value;
ไหม
ฉันต้องการบันทึกค่าใหม่ให้กับเขตข้อมูลบนเอนทิตีและฉันสงสัยว่ามันเป็นไปได้ที่จะใช้เอนทิตีเมทาทาทาฐานที่ตั้งหรือมันเป็นไปได้เพียงเพื่อตั้งค่าที่มีอยู่?
$wrapper->vimn_related_subjects[] = $value;
ไหม
คำตอบ:
เมื่อจัดการกับเขตข้อมูลที่มีหลายค่าวัตถุห่อหุ้มข้อมูลเมตาของเอนทิตีที่เกี่ยวข้องเป็นตัวอย่างของEntityListWrapper (อาจเป็นความคิดที่ดีที่จะเรียกดู API เพื่อดูวิธีการที่มีอยู่นอกจากนี้ยังทราบว่าคลาสนี้ใช้อินเทอร์เฟซ ArrayAccess )
ดังนั้นวิธีที่ง่ายที่สุดในการเพิ่มค่าใหม่ให้กับ EntityListWrapper คือการใช้โอเปอเรเตอร์ "[]":
$wrapper->field_example[] = $new_value;
สิ่งนี้จะสร้างรายการใหม่และกำหนดค่า ด้วยวิธีนี้เดลต้า (ออฟเซ็ตภายในรายการค่า) จะถูกสร้างขึ้นโดยอัตโนมัติ คุณสามารถตั้งค่าออฟเซ็ตได้ด้วยตัวเองหากคุณต้องการ หนึ่งในสามวิธีต่อไปนี้เทียบเท่ากัน:
$wrapper->field_example[$delta] = $new_value;
$wrapper->field_example->offsetSet($delta, $new_value);
$wrapper->field_example->get($delta)->set($new_value);
ในทั้งสามกรณีนี้จะเขียนทับค่าหากเดลต้ามีอยู่แล้วและสร้างรายการใหม่ถ้าไม่
นอกจากนี้คุณยังสามารถตั้งค่าอาร์เรย์ในฟิลด์ได้โดยตรง ทั้งสองวิธีมีความเท่าเทียมกัน:
$value = array
0 => array('property_example' => 'hello'),
1 => array('property_example' => 'world')
);
$wrapper->field_example = $value;
$wrapper->field_example->set($value);
อย่างไรก็ตามสิ่งนี้กำหนดให้คุณต้องทราบโครงสร้างภายในของฟิลด์ที่คุณกำหนดให้เนื่องจากคุณไม่ได้ใช้ตัวคลุมข้อมูลเมตาของฟิลด์
ในที่สุดคุณสามารถล้างค่าหลายค่าได้โดยตั้งค่าเป็นค่าว่าง ทั้งสามวิธีมีความเท่าเทียมกัน:
$wrapper->field_example->set();
$wrapper->field_example = array();
$wrapper->field_example = NULL;
$w->field_allowed_regions->set(array(null));
เป็นตัวเลือกการล้างเดียวที่ทำงานกับเขตข้อมูลอ้างอิงอนุกรมวิธานหลายค่าของฉัน
ฉันพบว่า
$wrapper->field_example[]->set($new_value);
เป็นความล้มเหลวร้ายแรง แต่
$wrapper->field_example[NULL]->set($new_value);
ได้รับอนุญาต