首页 / 帖子
Drupal创建索引报错:EntityMalformedException: Missing bundle property on entity of type node.

Drush创建索引的时候报错如下,请问如何解决,

Trying to get property of non-object node.module:2789
Creating default object from empty value node.module:1405 
Undefined property: stdClass::$type node.module:385                
Undefined property: stdClass::$nid node.module:1425
WD php: EntityMalformedException: 实体类型 node 上的绑定属性丢失。in entity_extract_ids() (line 7663 of includes/common.inc).   
EntityMalformedException: 实体类型 node 上的绑定属性丢失。 在 entity_extract_ids() (行 7663 在includes/common.inc).
Drush command terminated abnormally due to an unrecoverable error.


1个答案
YOYO
发布于:2015-06-12 17:45

Drupal论坛的解决方案:

https://www.drupal.org/node/1329872#comment-6748096


问题的本质是node-index的时候node_load找不到node,就是下面这个函数,可以加个判读,判断node是否存在。

function _node_index_node($node) {
  $node = node_load($node->nid);

  ///////添加在这里
  if (!$node) return;
  
  // Save the changed time of the most recent indexed node, for the search
  // results half-life calculation.
  variable_set('node_cron_last', $node->changed);

  // Render the node.
  $build = node_view($node, 'search_index');
  unset($build['#theme']);
  $node->rendered = drupal_render($build);

  $text = '<h1>' . check_plain($node->title) . '</h1>' . $node->rendered;

  // Fetch extra data normally not visible
  $extra = module_invoke_all('node_update_index', $node);
  foreach ($extra as $t) {
    $text .= $t;
  }

  // Update index
  search_index($node->nid, 'node', $text);
}


这个问题的主要原因是node数据的不完善,因为node_load至少有一个node revision,没有的就load不到,所以可以找到哪些不完善的node,然后删掉这些node,通过下面的sql:

SELECT nid FROM node WHERE nid NOT IN (SELECT nid FROM node_revision);