Điểm:-1

Làm cách nào để kiểm tra xem trường tiêu đề thực thể của tôi có được ghi vào bảng cơ sở dữ liệu cần thiết và không có trường nào khác được ghi ở đó không?

lá cờ my

Tôi có một thực thể được gọi là Sản phẩm thực thể. Và thực thể này có một biểu mẫu, nếu bạn thay đổi trường Tiêu đề trong biểu mẫu này, Drupal sẽ tự động lưu giá trị mới của trường này vào bảng thích hợp trong cơ sở dữ liệu, nhưng ngoài ra, tôi cũng lưu thay đổi trường Tiêu đề trong form sang một bảng cơ sở dữ liệu khác sản phẩm_sản phẩm bằng cách tạo một _custom_product_save_title chức năng. Nó là cần thiết. Và chức năng này được gọi trong hook_ENTITY_TYPE_update() theo dõi các thay đổi trong Sản phẩm Thực thể.

Tôi cần thêm một dấu kiểm để xem tiêu đề đã được lưu chưa và các trường khác có chưa được lưu hay không. Vui lòng cho tôi biết kiểm tra như vậy sẽ trông như thế nào và chính xác thì nó nên ở đâu trong mã?

function _custom_product_save_title($custom_product_id, $entity_product_title) {

  if (isset($fields['url']) && $fields['url'] == '') {
    if (isset($fields['name'])) {
      $fields['url'] = strtolower(str_replace(' ', '-', $fields['name']));
    }
  }
  $id = $form_state->getValue('cid');
  if (!empty($form_state->getValue('cid'))) {
    $query = $this->connection->update($this->getTableName())
      ->điều kiện('cid', $form_state->getValue('cid'));
  }
  khác {
    $query = $this->connection->insert($this->getTableName());
  }
  $kết quả = $truy vấn
    -> trường ($ trường)
    ->thực thi();
  nếu (!$id) {
    $id = $kết quả;
  }
 
  Bộ nhớ đệm::invalidateTags([
    "sản phẩm:" . $form_state->getValue('cid'),
  ]);

  Bộ nhớ đệm::invalidateTags([
    "sản phẩm:$custom_product_id",
  ]);

  nếu (!$custom_product_id) {
    Bộ nhớ đệm::invalidateTags([
      "product_list",
    ]);
  }

}

/**
 * Triển khai hook_ENTITY_TYPE_update().
 */
chức năng product_admin_node_update(\Drupal\Core\Entity\EntityInterface $entity) {
  if ($entity->bundle() == 'product') {
    $custom_product_id = $entity->get('field_product_cid')->value;
    $entity_product_title = $entity->getTitle();
    _custom_product_save_title($custom_product_id, $entity_product_title);
  }
}

Sau khi gỡ lỗi mã bằng xdebug, tôi thấy cấu trúc sau của đối số tiêu chuẩn $entity của cái móc:

$entity
  lĩnh vực
    trường_sản phẩm_cid
    trường_giây
    .....
    Tiêu đề
      x-mặc định
        danh sách
          0
            giá trị
              giá trị = âTiêu đề của tôiâ
apaderno avatar
lá cờ us
Chào mừng bạn đến với Câu trả lời của Drupal! Khi `hook_ENTITY_TYPE_update()` được gọi, entiiy và các trường của nó đã được lưu trong cơ sở dữ liệu.
leymannx avatar
lá cờ ne
Sử dụng `hook_ENTITY_TYPE_presave` để ghi đè dữ liệu trước khi dữ liệu được lưu trữ mà không cần gây rối với cơ sở dữ liệu hoặc bộ đệm. Hãy để tất cả những việc đó cho Drupal.
apaderno avatar
lá cờ us
`_custom_product_save_title()` không có bất kỳ tham số `$form_state` hoặc `$fields` nào cũng như (dưới dạng hàm) không có quyền truy cập vào `$this`. Điều này có nghĩa là `$form_state->getValue('cid')` và `$this->connection->update($this->getTableName())` sẽ gây ra lỗi hoặc cảnh báo.
apaderno avatar
lá cờ us
Khi đặt câu hỏi, vui lòng hiển thị mã bạn đang thực sự sử dụng và xác minh mã đó là mã PHP hợp lệ.
sonfd avatar
lá cờ in
Tôi nghĩ câu hỏi thực tế của bạn là "[Làm thế nào] để thêm kiểm tra xem tiêu đề đã được lưu chưa và liệu các trường khác có chưa được lưu [trong hook_entity_update()]" hay không, nhưng tôi không chắc điều đó có nghĩa là gì. Dự đoán tốt nhất của tôi là bạn muốn kiểm tra xem thực thể có thay đổi tiêu đề hay không, nhưng không có thay đổi nào khác, nhưng điều đó không có ý nghĩa gì đối với tôi trong bối cảnh bài đăng tổng thể của bạn.

Đă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.