Как я могу исправить 'EntityMalformedException', вызванную node_load () в Drupal 7? - PullRequest
0 голосов
/ 20 июня 2019

Я пытался загрузить узел из базы данных, для которого у меня есть nid, но я продолжаю получать EntityMalformedException. Это ошибка, которую я получаю:

EntityMalformedException : Отсутствует свойство комплекта на сущности типа узла. в entity_extract_ids () (строка 7947 из C: \ Apache24 \ htdocs \ devrevolution \ includes \ common.inc ).

Я использую Drupal 7.67, MySQL 5.7 и Apache 2 в Windows 10. node_load() используется в этом проекте сотни раз без проблем, но почему-то в этой функции я не могу заставить его правильно вернуть узел, не выбрасывая это исключение. Мне известно, что EntityFieldQuery является предпочтительным способом получения узла из базы данных в Drupal 7, но когда я попробовал следующее, он ничего не получил из базы данных.

$query = new EntityFieldQuery();
$query->entityCondition('entity_type', 'node')
      ->propertyCondition('type', 'study')
      ->fieldCondition('field_sname', 'value', $study_name, '=')
      ->addMetaData('account', user_load(1))
      ->execute();

Поле существует и заполняется в таблице field_sname с прикрепленным nid, но по какой-то причине оно не получает узел.


Я проверил, чтобы убедиться, что узел действительно существует в таблице узлов, а затем использовал следующее для получения nid из базы данных. Я удостоверился, что у узла также есть идентификатор ревизии, поскольку это вызывало проблемы у других. Этот код работает для получения правильного nid, но когда он достигает node_load($nid), он выдает исключение. Я знаю, что node_load вызывает ошибку, потому что без строки ошибок нет.

function get_study_information($study_name)
{
    // Retrieve the node nid with the study name from the database
    $query = db_query(
        'SELECT n.nid AS nid '. 
        'FROM {node} n '.
        'WHERE title = :studyname AND type = :study',
        array(':studyname' => $study_name,
              ':study' => "study"));

    $nid = $query->fetchAssoc()['nid'];
    $node = node_load($nid);
    return $node;
}
...