ฉันมีชื่อและนามสกุลมากมาย ฉันจำเป็นต้องรู้ว่าชื่อและนามสกุลใดแตกต่างจากชื่อปัจจุบันในฐานข้อมูล
ตัวอย่างเช่น:
$largeList = รายการใหญ่();
$storage = $this->entityTypeManager->getStorage("mi_entity");
$query = $storage->getQuery();
foreach ($largeList เป็น $item) {
$andGroup = $query->andConditionGroup();
$และกลุ่ม
->condition('name', $item->getName(), "<>")
->condition('นามสกุล', $item->getSurname(), "<>");
$query->condition($andGroup);
}
$ids = $query->execute();
แนวคิดคือการเปรียบเทียบชื่อและนามสกุล เช่น ส่วนของเงื่อนไข sql ควรมีลักษณะดังนี้:
เลือก
"base_table"."id" เป็น "id",
"base_table"."id" เป็น "base_table_id"
จาก
"entity_table" "ฐาน_ตาราง"
เข้าร่วมภายใน
"entity_table" "เอนทิตี_ตาราง"
เปิด "entity_table"."id" = "base_table"."id"
ที่ไหน
(("entity_table"."name" ไม่เหมือน 'ชื่อ 1' หลบหนี '\') และ ("entity_table"."นามสกุล" ไม่เหมือน 'นามสกุล 1' หลบหนี '\')) และ
(("entity_table"."name" ไม่เหมือน 'ชื่อ 2' หลบหนี '\') และ ("entity_table"."นามสกุล" ไม่เหมือน 'นามสกุล 2' หลบหนี '\')) และ ..... .
อย่างไรก็ตาม โค้ดข้างต้นเป็นตัวอย่าง สร้างการรวมเพิ่มเติมสำหรับแต่ละรายการในอาร์เรย์ดังนี้:
เลือก
"base_table"."id" เป็น "id",
"base_table"."id" เป็น "base_table_id"
จาก
"entity_table" "ฐาน_ตาราง"
เข้าร่วมภายใน
"entity_table" "เอนทิตี_ตาราง"
เปิด "entity_table"."id" = "base_table"."id"
เข้าร่วมภายใน
"entity_table" "entity_table_2"
เปิด "entity_table_2"."id" = "base_table"."id"
เข้าร่วมภายใน
"entity_table" "entity_table_3"
เปิด "entity_table_3"."id" = "base_table"."id"
เข้าร่วมภายใน
"entity_table" "entity_table_4"
เปิด "entity_table_4"."id" = "base_table"."id"
ที่ไหน
(("entity_table"."name" ไม่เหมือน 'ชื่อ 1' หลบหนี '\') และ ("entity_table"."นามสกุล" ไม่เหมือน 'นามสกุล 1' หลบหนี '\')) และ
(("entity_table_2"."name" ไม่เหมือน 'ชื่อ 2' หลบหนี '\') และ ("entity_table_2"."นามสกุล" ไม่เหมือน 'ชื่อสุดท้าย 2' หลบหนี '\')) และ
(("entity_table_3"."name" ไม่เหมือน 'NAME 3' ESCAPE '\') และ ("entity_table_3"."surname" ไม่เหมือน 'LAST NAME 3' ESCAPE '\')) และ
(("entity_table_4"."name" NOT LIKE 'NAME 4' ESCAPE '\') and ("entity_table_4"."surname" NOT LIKE 'LAST NAME 4' ESCAPE '\'))
ในข้อความที่ตัดตอนมาจากข้อความค้นหานี้ ฉันแสดงเพียง 4 เงื่อนไขที่สร้างการรวม 4 รายการ แต่ถ้าฉันมี 500 รายการ ก็จะสร้างการรวม 500 รายการ
วิธีที่ถูกต้องในการเขียนเงื่อนไขเพื่อหลีกเลี่ยงการรวมที่ไม่จำเป็นเหล่านี้คืออะไร