moodle_database::insert_record_raw() 未找到字段

标签 moodle

我试图从 URL 中提取一些数据并将其存储到我在 Moodle 中创建的表中,它在标题中显示了错误。我的目标是提取 cursos>curso 上属性“nome”内的所有值并将它们放在我的表 ecoclipaluno 上。 示例链接。构建 URL 的参数在更改时可以提供更多值来存储。或更少。

https://clip.unl.pt/sprs?lg=pt&year=2013&uo=97747&srv=rsu&p=1&tp=s&md=3&rs=8145&it=5&it=1030123459

function buildURL($year, $period, $typeperiod,$course)
{

return 'https://clip.unl.pt/sprs?lg=pt&year='.$year.'&uo=97747&srv=rsu&p='.$period.'&tp='.$typeperiod.'&md=3&rs='.$course.'&it=5&it=1030123459';
}
function doRequest_with_FileGetContents($url)
{
return file_get_contents($url);
}
function processXMLforCourse($xmlContent){
$xmlObj= new SimpleXMLElement($xmlContent);
$result=array();
foreach($xmlObj->unidade_curricular->cursos->curso as $curso){
$result[]= $curso->attributes()->nome;
}
return $result;
}
$context=get_context_instance(CONTEXT_COURSE,$courseid);
//$shortname=$course->shortname;
$idnumber=$course->idnumber;
$timecreated=$course->startdate;
$typeperiod='s';
        if(date("m",$timecreated) >07 && date("m",$timecreated) <13){
            $period='1';
            $url=buildURL(date("Y",strtotime('+1 year',$timecreated)),$period,$typeperiod,$idnumber); // 1st semester

        }
        else{
            $period='2';
            $url=buildURL(date("Y",$timecreated),$period,$typeperiod,$idnumber); // 2nd semester

        }
$content_b=doRequest_with_FileGetContents($url);
$dataClipCourse= processXMLforCourse($content_b);
$DB->insert_record('ecoclipaluno',$dataClipCourse);

从数据操作的Moodle API来看,方法insert_record有4个参数,最后2个是可选的,但它们都没有指定字段。我想将 $dataClipCourse 插入到字段 coursename 中。我怎样才能做到这一点?

enter image description here

array(8) { [0]=> object(SimpleXMLElement)#37 (1) { [0]=> string(54) "Licenciatura em Engenharia Informatica (Tronco comum)"} 1 => object(SimpleXMLElement)#36 (1) { [0]=> string(38) "Mestrado em Matemática e Aplicações"} 2 => object(SimpleXMLElement)#44 (1) { [0]=> string(92) "Mestrado em Matemática e Aplicações, Especialização em Álgebra, Lógica e Computação"} 3 => object(SimpleXMLElement)#45 (1) { [0]=> string(82) "Mestrado em Matemática e Aplicações, Especialização em Matemática Financeira"} [4]=> object(SimpleXMLElement)#46 (1) { [ 0]=> string(104) "Mestrado em Matemática e Aplicações, Especialização em Análise Numérica e Equações Diferenciais"} [5]=> object(SimpleXMLElement)#47 (1) { [0]=> string(114) "Mestrado数学和应用程序 - 专业、统计和操作研究"} [6]=> object(SimpleXMLElement)#48 (1) { [0]=> string(74) "Engenharia Informática 许可证,Perfil de Ciências da Engenharia "} [7]=> object(SimpleXMLElement)#49 (1) { [0]=> string(72) "Licenciatura em Engenharia Informatica, Perfil de Informatica Aplicada"} }

编辑:error

enter image description here

最佳答案

insert_record() 的第二个参数需要是一个对象而不是数组,并且将字段名称作为属性。例如:

$result = new stdClass();
$result->codigo = xxx;
$result->qualificacao_atribuida = xxx;

http://docs.moodle.org/dev/Data_manipulation_API#Inserting_Records

编辑:我刚刚注意到 processXMLforCourse() 函数返回一个名称数组 - 所以也许是这样的

$dataClipCourse= processXMLforCourse($content_b);
foreach ($dataClipCourse as $nome) {
    $data = new stdClass();
    $data->nome = $nome->__toString();
    $DB->insert_record('ecoclipaluno', $data);
}

关于moodle_database::insert_record_raw() 未找到字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22458438/

相关文章:

php - 我如何判断 moodle cron 是否正常工作?

php - 如何访问 Moodle 中 Mustache 模板中对象数组的值?

Mysql left join 4个可能的值

php - Moodle 从代码更新 mysql

php - 如何在Moodle数据库模块中添加新的表单字段?

moodle - 使用 API 动态创建 Moodle 类(class)

ftp - 通过 FTP 将类(class)上传到 Moodle

linux - 无法在 LAMP 中访问本地主机

database - 需要帮助调试 Moodle 的自定义身份验证插件