Tôi có một mảng lớn tên và họ, tôi cần biết cái nào trong số chúng khác với cái hiện tại trong cơ sở dữ liệu.
Ví dụ:
$largeList = largeList();
$storage = $this->entityTypeManager->getStorage("mi_entity");
$query = $storage->getQuery();
foreach ($largeList as $item) {
$andGroup = $query->andConditionGroup();
$andGroup
->điều kiện('tên', $item->getName(), "<>")
->điều kiện('họ', $item->getHọ(), "<>");
$query->condition($andGroup);
}
$ids = $query->execute();
Ý tưởng là để so sánh tên và họ, ví dụ: một phần của điều kiện sql sẽ trông giống như sau:
LỰA CHỌN
"base_table".."id" NHƯ "id",
"base_table".."id" NHƯ "base_table_id"
TỪ
"entity_table" "base_table"
THAM GIA BÊN TRONG
"bảng_thực thể" "bảng_thực thể"
BẬT "entity_table".."id" = "base_table".."id"
Ở ĐÂU
(("entity_table".."name" KHÔNG THÍCH 'TÊN 1' ESCAPE '\') và ("entity_table".."họ" KHÔNG THÍCH 'TÊN 1' ESCAPE '\')) VÀ
(("entity_table".."name" KHÔNG THÍCH 'TÊN 2' ESCAPE '\') và ("entity_table".."họ" KHÔNG THÍCH 'HỌ 2' ESCAPE '\')) VÀ ..... .
Tuy nhiên, đoạn mã trên là một ví dụ, tạo ra một liên kết bổ sung cho mỗi mục trong mảng như sau:
LỰA CHỌN
"base_table".."id" NHƯ "id",
"base_table".."id" NHƯ "base_table_id"
TỪ
"entity_table" "base_table"
THAM GIA BÊN TRONG
"bảng_thực thể" "bảng_thực thể"
BẬT "entity_table".."id" = "base_table".."id"
THAM GIA BÊN TRONG
"bảng_thực thể" "bảng_thực thể_2"
BẬT "entity_table_2".."id" = "base_table".."id"
THAM GIA BÊN TRONG
"bảng_thực thể" "bảng_thực thể_3"
BẬT "entity_table_3".."id" = "base_table".."id"
THAM GIA BÊN TRONG
"bảng_thực thể" "bảng_thực thể_4"
BẬT "entity_table_4".."id" = "base_table".."id"
Ở ĐÂU
(("entity_table".."name" KHÔNG THÍCH 'TÊN 1' ESCAPE '\') và ("entity_table".."họ" KHÔNG THÍCH 'TÊN 1' ESCAPE '\')) VÀ
(("entity_table_2".."name" KHÔNG THÍCH 'TÊN 2' ESCAPE '\') và ("entity_table_2".."họ" KHÔNG THÍCH 'HỌ 2' ESCAPE '\')) VÀ
(("entity_table_3".."name" KHÔNG THÍCH 'TÊN 3' ESCAPE '\') và ("entity_table_3".."họ" KHÔNG THÍCH 'TÊN 3' ESCAPE '\')) VÀ
(("entity_table_4".."name" KHÔNG THÍCH 'TÊN 4' ESCAPE '\') và ("entity_table_4".."họ" KHÔNG THÍCH 'TÊN 4' ESCAPE '\'))
Trong đoạn trích từ truy vấn này, tôi chỉ hiển thị 4 điều kiện tạo ra 4 phép nối, nhưng nếu tôi có 500 thì nó sẽ tạo ra 500 phép nối.
Điều gì sẽ là cách chính xác để viết điều kiện để tránh những phép nối không cần thiết này?