Mã đang gọi hành hình()
trên đối tượng được trả về từ $query->andConditionGroup()
, nhưng đối tượng đó không thực hiện bất kỳ hành hình()
phương pháp.
Cách sử dụng đúng andConditionGroup()
được hiển thị trong QueryBase::andConditionGroup()
.
$query = \Drupal::entityQuery('drawing');
$group = $query->andConditionGroup()
->điều kiện('figures.color', 'đỏ')
->điều kiện('hình.hình', 'tam giác');
$query->condition($group);
$group = $query->andConditionGroup()
->điều kiện('figures.color', 'blue')
->điều kiện('hình.hình', 'hình tròn');
$query->condition($group);
$entity_ids = $query->execute();
Trong trường hợp của bạn, sử dụng andConditionGroup()
không cần thiết, vì truy vấn được thực thi bởi mã đó trả về tất cả các nút:
- Loại nội dung là cấp 3
- Tiêu đề là
$file_name
- trạng thái là 0
Nó không trả về tất cả các nút mà ít nhất một trong các điều kiện đó là đúng. Nó tương tự như những gì đoạn mã sau thực hiện, trả về tất cả trang các nút nơi giá trị của trường_một số_trường cao hơn 14.
$query = \Drupal::entityQuery('nút')
->điều kiện('loại', 'trang')
->điều kiện('trường_một số_trường', 14, '>');
$results = $query->execute();
$query->execute()
trả về một mảng các ID thực thể, không phải một thực thể cũng như một mảng các thực thể. $nids = $query->execute(); $nids->setPublished(TRUE)->save();
vẫn sai, vì một mảng không thực hiện setPublished()
phương pháp.
Đưa ra một mảng ID nút $nids
, mã chính xác để tải các nút là mã sau đây.
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple(array_values($nids));
nút $
sẽ chứa một mảng các thực thể. Xuất bản chúng có thể đạt được với đoạn mã sau.
foreach ($nodes là $node) {
$node->setPublished(TRUE)->save();
}
Đối tượng được trả về từ \Drupal::entityQuery()
xác minh người dùng hiện đang đăng nhập có quyền xem các nút được trả về. Trong hầu hết các trường hợp, người dùng không có quyền truy cập vào các nút chưa được xuất bản. Để tránh truy vấn chỉ trả về các nút mà người dùng hiện đang đăng nhập có thể xem, cần phải gọi $query->accessCheck(FALSE)
, như trong $query = \Drupal::entityQuery('node')->checkAccess(FALSE);
Hơn nữa, các tồn tại ('nid')
cuộc gọi là không cần thiết, vì ID nút luôn được lưu cho các nút.
Thoát khỏi vòng lặp trên $i_đã chọn
, mã tôi sẽ sử dụng là mã sau đây.
$query = \Drupal::entityQuery('node')->checkAccess(FALSE);
$nids = $query->condition('type', 'level3')
->điều kiện('tiêu đề', $file_name)
->điều kiện('trạng thái', '0')
->thực thi();
$nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple(array_values($nids));
foreach ($nodes là $node) {
$node->setPublished(TRUE)->save();
}