经常会在项目中遇到,比如使用feeds导入,Drupal8下面只对文本字段支持的比较友好,
我们要根据A字段的值,经过一定的运算,赋值给B字段,通常我会使用下面的这段代码实现:
/**
* @file
* 为j_resource实现接口hook_ENTITY_TYPE_presave.
*/
function mycustom_j_resource_presave(EntityInterface $entity) {
//j_marcid保存的字符串形式,根据它的值获取到对应的id,赋值给j_marc_id
if (!empty($entity->j_marcid->value) && empty($entity->j_marc_id->target_id)) {
//查询
$j_marcid = $entity->j_marcid->value;
$ids = \Drupal::entityQuery('j_marc')
->condition('j_marcid', $j_marcid, '=')
->range(0, 1)
->execute();
//根据查询过来的id来设置$entity->j_marc_id->target_id
if(!empty($ids)){
$id = reset($ids);
$entity->j_marc_id->target_id = $id;
}
}
}
这是一段实例代码,用的时候套用即可。