Xác minh một nút có ID nút đã cho tồn tại


12

Tôi đã tạo một mô-đun nhận ID nút từ biểu mẫu. Khi xác thực mẫu, nó cần xác minh một nút có ID nút đó tồn tại.

Làm thế nào tôi có thể xác minh nó?

Câu trả lời:



16

Nếu bạn không muốn tải toàn bộ nút thì bạn có thể sử dụng truy vấn thực thể:

$values = \Drupal::entityQuery('node')->condition('nid', $id)->execute();
$node_exists = !empty($values);

Điều này sẽ hiệu quả hơn nhiều vì nó chỉ yêu cầu id chứ không phải tất cả các trường nút.


1
Nó thậm chí sẽ không gọi quá nhiều hook, vì vậy nó hoàn toàn nhanh hơn và nó vẫn không yêu cầu mã cứng tên bảng cơ sở dữ liệu (điều này sẽ xảy ra khi truy vấn trực tiếp cơ sở dữ liệu).
kiamlaluno

3
Điều này thậm chí có thể không rõ ràng nhanh hơn, phụ thuộc vào các yếu tố khác nhau. Nếu ID không tồn tại, thì truy vấn tải có thể nhanh hơn và hiệu quả hơn so với thực hiện truy vấn thực thể (bao gồm hai lớp trình tạo truy vấn. Và nếu nút tồn tại, thì nó có thể đã được lưu trong bộ nhớ cache / bộ đệm liên tục hoặc có thể cần phải được sử dụng bằng cách nào đó nếu nó tồn tại .. trong tất cả các trường hợp đó, load () thực sự có thể có ý nghĩa hơn.
Berdir

1
Tôi đồng ý rằng nó phụ thuộc vào tình hình.
Mắt

2
Tôi đã bắt đầu gặp vấn đề với thiết lập của tôi. Tôi có khoảng 8000 nút. Mã này trả về siêu lừa nhanh. Đây phải là câu trả lời được chấp nhận.
Jorge Calderon

2
Thành thật mà nói, đây là câu trả lời tốt nhất và hiệu quả nhất.
JF Kiwad
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.