Я пытался загрузить узел из базы данных, для которого у меня есть 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;
}