当前位置: 首页 > 后端技术 > PHP

WebFrom数据从Drupal7迁移到Drupal8

时间:2023-03-29 19:14:27 PHP

迁移思路在Drupal8环境下编写Sql找出Drupal7下的所有数据,然后组织数据结构调用Drupal8API向Drupal8数据库中插入数据迁移步骤配置数据库连接环境修改Drupal8站点的设置。php文件//Drupal8数据库链接$databases['default']['default']=array('database'=>'d8','username'=>'root','password'=>'','prefix'=>'','host'=>'127.0.0.1','port'=>'3306','namespace'=>'Drupal\\Core\\Database\\Driver\\mysql','driver'=>'mysql',);//Drupal7数据库链接$databases['upgrade']['default']=array('database'=>'d7','username'=>'root','password'=>'','prefix'=>'','host'=>'127.0.0.1','port'=>'3306','namespace'=>'Drupal\\Core\\Database\\Driver\\mysql','驱动程序'=>'mysql',);根据Drupal7Webform的结构,在Drupal8中创建相同的Webform,查看Drupal7Webform数据$nid=1382;//drupal7webform对应的节点Id$firstSid=0;$webformId='register_as_an_independent';//获取Drupal7表单的提交$submittedData=[];$dataQuery=Database::getConnection('default','upgrade')->select('webform_submitted_data','wd');$dataQuery->join('webform_component','c','c.cid=wd.cidANDc.nid=wd.nid');$dataQuery->addField('c','form_key');$dataQuery->addField('wd','sid');$dataQuery->addField('wd','data');$dataQuery->condition('wd.nid',$nid,'=');$result=$dataQuery->execute()->fetchAll();foreach($resultas$row){$submittedData[$row->sid][$row->form_key][]=['value'=>$row->data,];}$query=Database::getConnection('default','upgrade')->select('webform_submissions','ws');$query->addField('ws','sid');$query->addField('ws','uid');$query->addField('ws','submitted');$query->addField('ws','completed');$query->addField('ws','modified');$query->addField('ws','remote_addr');$query->condition('nid',$nid,'=');$query->condition('sid',$firstSid,'>');//$query->condition('sid',($firstSid+9),'<');$submit=$query->execute()->fetchAllAssoc('sid');将数据导入Drupal8$entityId=90;//Drupal8中的表单对应节点ID$checkBoxKey=array('target_types','following_dbms','versions_of_powerbuilder','work_locations');foreach($submitas$sid=>$info){if(empty($submittedData[$sid])){继续;}//导入数据到D8c$values=['webform_id'=>$webformId,'entity_type'=>'node','entity_id'=>$entityId,'in_draft'=>FALSE,'uid'=>$info->uid,'langcode'=>'en','token'=>'pgmJREX2l4geg2RGFp0p78Qdfm1ksLxe6IlZ-mN9GZI','uri'=>'/consultants/independents/apply','created'=>$info->已提交,'已完成'=>$info->已完成,'changed'=>$info->modified,'remote_addr'=>$info->remote_addr,'data'=>['target_types'=>['AppeonWebApp'],'following_dbms'=>['SQLServer'],'versions_of_powerbuilder'=>['PB12.x'],'years_using_powerbuilder'=>'5','powerbuilder_certification'=>'否','id_number'=>'','linkedin_or_xing_profile'=>'','work_type'=>'Full-time','work_locations'=>['Telecommute'],'first_name'=>'first_name','last_name'=>'last_name','email_address'=>'@','country'=>'US','state_province'=>'','postal_code'=>'0000','certify_true_and_correct'=>'1','agree_to_be_published'=>'1','agree_terms'=>'1','email_of_subject'=>'',],];foreach($submittedData[$sid]as$key=>$value){if(in_array($key,$checkBoxKey)){$values['data'][$key]=[];}foreach($valueas$val){if(in_array($key,$checkBoxKey)){$values['data'][$key][]=$val['value'];}else{$values['data'][$key]=$val['value'];}}}//检查网络表单是否打开。$webform=Webform::load($values['webform_id']);$is_open=WebformSubmissionForm::isOpen($webform);if($is_open===TRUE){//创建新的提交实例$webform_submission=WebformSubmission::create($values);//验证提交。$errors=WebformSubmissionForm::validateWebformSubmission($webform_submission);//检查没有验证错误。如果(!empty($errors)){print_r($errors);死();}else{//提交值并获取提交ID。$webform_submission=WebformSubmissionForm::submitWebformSubmission($webform_submission);打印$webform_submission->id();}}}注意:如果有多个字段选中,则插入字段的值应该是一个数组。如果是附件或者图片,我没试过,可以自己研究。