我一直在尝试从数据库中加载一个我有需求的节点,但是我不断得到一个EntityMalformedException
。这是我得到的错误:
EntityMalformedException :类型节点的实体上缺少捆绑属性。在 entity_extract_ids()中( C:\ Apache24 \ htdocs \ devrevolution \ includes \ common.inc 中的 7947 行)。
我在Windows 10上使用Drupal 7.67,MySQL 5.7和Apache 2。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。我已确保该节点也具有修订版本ID,因为这会给其他节点造成问题。该代码可以获取正确的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;
}