Điểm:1

Lập trình xuất bản các nút chưa được xuất bản

lá cờ in

Tôi muốn xuất bản các nút chưa được xuất bản trong một hành động tùy chỉnh. Để làm điều này, tôi truy vấn cơ sở dữ liệu về một điều kiện cụ thể và muốn sử dụng điều kiện 'tồn tại' để tìm ID nút để xuất bản. Đây là mã tôi đang sử dụng.

$query = \Drupal::entityQuery('nút');

foreach($i_được chọn là $is) {
  $nids = $query->andConditionGroup()
    -> điều kiện ('loại', 'cấp 3')
    ->điều kiện('tiêu đề', $file_name)
    ->điều kiện('trạng thái', '0')
    -> tồn tại ('nid')
    ->thực thi();

  $nids->setPublished(TRUE)->save();
}

Tôi nhận được lỗi này,

Lỗi: Gọi phương thức không xác định Drupal\Core\Entity\Query\Sql\Condition::execute()

Truy vấn SQL tôi đang cố gắng đạt được là:

   chọn nid, status, title từ node_field_data trong đó status = '0' và title = $filename

của kết quả, tôi muốn xem liệu các nid có tồn tại hay không và xuất bản các nid đó.

Làm cách nào để khắc phục lỗi đó?

apaderno avatar
lá cờ us
Sau khi câu hỏi được trả lời, bạn không thể thay đổi nó, thậm chí không thể thêm bản cập nhật dựa trên câu trả lời đã cho. Các câu hỏi không dành cho việc trao đổi qua lại với những người dùng trả lời.
Jiah avatar
lá cờ in
Tôi đã kiểm tra câu trả lời của bạn chỉ sau khi tìm ra kết thúc của tôi. Tôi sẽ đảm bảo không cập nhật câu hỏi. Cảm ơn sự hỗ trợ của bạn :)
Điểm:3
lá cờ us

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();
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.