Moodle сохраняет данные в базу данных из массива ASSOC, а не из объекта данных

Итак, у меня есть этот ассоциативный массив, ключом является столбец данных, а значением являются сами данные, другие фреймворки, такие как kohana, используют ORM, который автоматически создает частный $data = aray() и передает его в базу данных... поэтому, если

$class->data = "value";
$class->save() // $class->update()

это легко в фреймворках с ORM, но как насчет мудла? Я пытался использовать $DB->insert_record(), но создать stdClass сложно. как я могу передать массивы в базу данных в Moodle? пожалуйста, мне нужна помощь... вот мой класс

<?php

/**
 * Course completion Extention- student self marked - plugin
 *
 * @package   completion
 * @copyright 2012 Ekomerce Ltd
 * @author    Gavin Sanden <[email protected]>
 */



completion_ext::$DB = $DB;

class completion_ext{
    private $data = array();
    public static $DB;

 /**
 * DB Table
 * @var string $table
 */
public $table = 'completion_ext';

/**
 * Array of required table fields, must start with 'id'.
 * @var array $required_fields
 */




 public static function fetch_all($params) {}
function __construct($data = null){
    if($data != null && is_array($data)){
        $this->data = $data;
    }
}
public static function get_from_user($user_id){
    $variables =  self::$DB->get_records('completion_ext',array(
        'user_id'=>$user_id
    ));
    $completion_array  = array();
    foreach($variables as $variable){
        $com = new completion_ext($variable);
        $completion_array[] = $com;
    }
    return $completion_array;

}

public static function exists($user, $course){
    return self::$DB->record_exists('completion_ext', array(
        'user_id'=>$user,
        'course'=>$course

    ));
}
public static function id_exists($id){
        return self::$DB->record_exists('completion_ext', array(
        'id'=>$id
    ));
}
public static function get_from_course($course, $user_id){
    $variables = self::$DB->get_record('completion_ext',array(
        'user_id'=>$user_id,
        'course'=>$course
    ));
    return new completion_ext($variables);
}
public function __set($dt, $vl){
    $this->data[$dt] = $vl;
}
public static function get_by_id($id){
    $variables = self::$DB->get_record('completion_ext',array(
        'id'=>$id
    ));
    return new completion_ext($variables);
}
public static function check_completion_from_user($user_id){
    self::$DB->record_exists($table, array(
        'user_id'=>$user_id
    ));
}
public function __get($dt){
    return $this->data[$dt];
}
public function save(){
    echo print_r($this->data);
}
public function update(){
    self::$DB->update_record("completion_ext", $this);
}

} ?>


person Gian Santillan    schedule 04.06.2012    source источник


Ответы (1)


Если вам просто нужен объект stdClass, это просто:

$myObject = (object) array('propertyName' => 'value');

Оператор приведения (object) создает экземпляр stdClass со всеми индексами массива в качестве свойств.

person geon    schedule 04.06.2012
comment
все еще не будет работать, я изменил код на эту 'общедоступную функцию save () { return self:: $ DB- >insert_record ('completion_ext', (Object) $ this- > data); }' - person Gian Santillan; 04.06.2012
comment
Тогда что-то еще не так. Разве вы не получаете какое-то сообщение об ошибке? - person geon; 05.06.2012
comment
я исправил $CFG, поэтому возвращаются все ошибки. я связал его через ajax, оповещение (html) по-прежнему не работает, выдает пустое сообщение, попытался повторить $DB-›insert_record(), но он отправляет мне 404, - person Gian Santillan; 06.06.2012