Рейтинг:-1

Как сделать проверку, что поле заголовка моего объекта записано в нужную таблицу базы данных и что там нет другого поля?

флаг my

У меня есть сущность под названием Entity Product. И эта сущность имеет форму, если изменить поле Заголовок в этой форме, Drupal автоматически сохранит новое значение этого поля в соответствующей таблице в базе данных, но кроме того, я также сохраняю изменение поля Заголовок в формы в другую таблицу базы данных продукт_продукт путем создания _custom_product_save_title функция. Это необходимо. И эта функция вызывается в крючок_ENTITY_TYPE_update() который отслеживает изменения в Entity Product.

Мне нужно добавить проверку, чтобы увидеть, сохранен ли заголовок и не сохранены ли другие поля. Подскажите пожалуйста, как должна выглядеть такая проверка и где именно она должна быть в коде?

функция _custom_product_save_title($custom_product_id, $entity_product_title) {

  если (isset($fields['url']) && $fields['url'] == '') {
    если (isset($fields['имя'])) {
      $fields['url'] = strtolower(str_replace(' ', '-', $fields['name']));
    }
  }
  $id = $form_state->getValue('cid');
  если (!пусто($form_state->getValue('cid'))) {
    $query = $this->connection->update($this->getTableName())
      ->условие('cid', $form_state->getValue('cid'));
  }
  еще {
    $query = $this->connection->insert($this->getTableName());
  }
  $результат = $запрос
    ->поля($поля)
    ->выполнить();
  если (!$id) {
    $id = $результат;
  }
 
  Кэш::invalidateTags([
    "товар:" . $form_state->получить значение('цид'),
  ]);

  Кэш::invalidateTags([
    "продукт: $custom_product_id",
  ]);

  если (!$custom_product_id) {
    Кэш::invalidateTags([
      "список продуктов",
    ]);
  }

}

/**
 * Реализует hook_ENTITY_TYPE_update().
 */
function product_admin_node_update(\Drupal\Core\Entity\EntityInterface $entity) {
  если ($entity->bundle() == 'продукт') {
    $custom_product_id = $entity->get('field_product_cid')->значение;
    $entity_product_title = $entity->getTitle();
    _custom_product_save_title($custom_product_id, $entity_product_title);
  }
}

После отладки кода с помощью xdebug я вижу следующую структуру того, что входит в стандартный аргумент $сущность из крючка:

$сущность
  поля
    field_product_cid
    поле_секунда
    .....
    заглавие
      х-по умолчанию
        список
          0
            ценности
              value = «Мой титул»
apaderno avatar
флаг us
Добро пожаловать в Drupal Ответы! Когда вызывается `hook_ENTITY_TYPE_update()`, сущность и ее поля уже сохраняются в базе данных.
leymannx avatar
флаг ne
Используйте `hook_ENTITY_TYPE_presave`, чтобы переопределить данные до того, как они будут сохранены, без необходимости возиться с базой данных или кешем. Оставьте все это Drupal.
apaderno avatar
флаг us
`_custom_product_save_title()` не имеет параметров `$form_state` или `$fields` и (как функция) не имеет доступа к `$this`. Это означает, что `$form_state->getValue('cid')` и `$this->connection->update($this->getTableName())` вызовут ошибки или предупреждения.
apaderno avatar
флаг us
Задавая вопрос, пожалуйста, покажите код, который вы действительно используете, и убедитесь, что код является допустимым кодом PHP.
sonfd avatar
флаг in
Я думаю, что ваш фактический вопрос: «[Как] добавить проверку, чтобы увидеть, сохранен ли заголовок и не сохранены ли другие поля [в hook_entity_update ()]», но я не уверен, что это значит. Я думаю, что вы хотите проверить, изменился ли заголовок объекта, но не другие изменения, но это не имеет для меня особого смысла в контексте вашего общего поста.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.