You are here

Drupal8/9实体的索引与默认值设置

g089h515r806 的头像
Submitted by g089h515r806 on 星期二, 2020-11-24 03:46

作者:亚艾元技术部

我们在Drupal8/9下面定制自己的实体时,可以方便对基字段(base field)设置索引,来增加查询时的效率。 设置索引的代码如下:

  protected function getSharedTableFieldSchema(FieldStorageDefinitionInterface $storage_definition, $table_name, array $column_mapping) {
    $schema = parent::getSharedTableFieldSchema($storage_definition, $table_name, $column_mapping);
    $field_name = $storage_definition->getName();
    $index_fields = ['uid', 'to', 'paper', 'gaohao', 'created'];
    if(in_array($field_name, $index_fields)){
      $this->addSharedTableFieldIndex($storage_definition, $schema, TRUE);
	}
    return $schema;
  }

  

  我们在'uid', 'to', 'paper', 'gaohao', 'created'几个base field上面设置了索引。

  

  这个时候,我们给实体创建了表单,基于entity form。在添加实体的时候,如果有的字段没有设置值,我允许它们可以为空。但是在保存的时候,如果没有设置值,则会报错,无法保存。

  我检查了一下,对于mysql的索引字段,需要为它设置一个值,最好这样。 我修改了保存实体的代码:

	//设置默认值
	if(empty($entity->uid->target_id)){
		$entity->uid->target_id = \Drupal::currentUser()->id();
	}
	if(empty($entity->to->target_id)){
		$entity->to->target_id = 0;
	}
	if(empty($entity->paper->target_id)){
		$entity->paper->target_id = 0;
	}
	//初始化为0字符串,这个字段加了索引。,不初始化的化,会报错,
	if(empty($entity->gaohao->value)){
		$entity->gaohao->value = "0";
	}	
	if(empty($entity->created->value)){
	  $entity->created->value = time();	
	}
	$entity->changed->value = time();
	$status = $entity->save();


    给索引字段添加了默认值,这样就可以在没有填写的情况下添加信息了。


论坛: