PD: La consulta está creada y si la pongo en PhpmyAdmin funciona, sólo necesito la explicación de cómo poder mostrarla.
Gracias y un saludo.
Jesús Serrano
Después, tambien tienes get_records que sirve para obtener los registros de una tabla que cumplan unas determinadas condiciones especificadas mediante parámetros, por ejemplo registros de la tabla user cuyo nombre de usuario sea moodle.
En cualquier caso, antes de usar consultas complejas que puede depender de como estén estructuradas las tablas, investigaría si existen funciones de Moodle que hagan esa tarea o parte de ella. Así obtienes independencia y modularidad, y la complejidad se reduce mucho.
Fatal error: Call to a member function get_record() on a non-object in /var/www/moodle/mod/newmodule/lib.php on line 112
Simplemente compruebo que exista un registro con el id pasado a la función delete_instance llamada cuando se pulsa la "X" para borrar la instancia.
if (! $newmodule = $DB->get_record('newmodule', array('id' => $id))) {
return false;
}
Y después procedo a borrar el registro:
$DB->delete_records('newmodule', array('id' => $newmodule->id));
Pero no alcanza esta linea y por lo tanto no lo borra. He mirado el código de otros módulos y hacen exáctamente lo mismo.
En cualquier caso, $DB no es un objeto, sino una variable global, no tiene métodos, por tanto no puedes invocar el método get_record()
En realidad en Moodle 2.0 si es un objeto y tiene métodos, y es la forma adecuada de usarla.
Pero si el código es para 1.9, la variable $DB no existe y hay que llamar a las funciones de acceso a base de datos directamente. Asimismo el paso de parámetros de la consulta no se hace por medio de un array, sino usando parámetros posicionales. Por tanto el código sería así:
if (!$newmodule = get_record('newmodule', 'id', $id)) {
return false;
}
y así:
delete_records('newmodule', 'id', $newmodule->id);
Saludos. Iñaki.
Muchísimas gracias por tu respuesta.
Es cierto que para desarrollar mi módulo uso la versión estable 1.9.9 (Build: 20100609).
He hecho los cambios que me has dicho en mi código y el error desaparece, así como el registro es eliminado correctamente, por lo tanto funciona.
Me gustaría que mi módulo fuera compatible para la versión 2.0, y no sé si el cambio que me has dicho implica que en la versión 2.0 es necesario usar el objeto $DB para hacer uso de los métodos get_record() y delete_record() o que será complatible sin $DB.
En caso de que fuera necesario o recomendable utilizar el objeto $DB para la versión 2.0, me gustaría saber de qué forma puedo en función de la versión Moodle, usar una forma u otra.
Un saludo.
Me temo que la cosa no es sencilla. En el caso de la versión 2.0 es obligatorio usar el objeto $DB y sus métodos para acceder a la base de datos y en 1.9 justo lo contrario.
Además de eso, como he comentado, en las funciones "sencillas" (get_record, get_field, etc.) el paso de parámetros pasa de ser posicional a pasarse en un array asociativo. En el caso de las funciones "genericas" (get_records_sql, etc.) donde se puede construir SQL arbitrario, la forma de nombras las tablas y la forma de indicar los valores a utilizar en la consulta han cambiado también sustancialmente. Y de igual manera han cambiado la gestión de los 'recordset' que devuelven este tipo de funciones.
Por tanto tratar de soportar ambas versiones en un único código va a ser complicado. Probablemente más complicado que tener dos versiones del módulo: una para 1.9 y otra para 2.0.
Si usas un buen sistema de gestión de código fuente que permita trabajar de forma eficiente y cómoda con ramas, el mantener las dos ramas en paralelo puede ser bastante manejable (yo personalmente uso git, pero mercurial es igual de bueno; si no te queda más remedio puede user subversion, pero es más limitado en este caso).
Saludos. Iñaki.
Lo más probable es que eliga entre desarrollar para 1.9 o para 2.0, sin llevar las dos ramas en paralelo, no porque no quiera, sino por falta de tiempo.
Tendré que tomar una decisión, pero lo más seguro es que sea un módulo para la versión 2.0, ya que parece que la fecha de la última release será para el mes que viene:
http://docs.moodle.org/en/Moodle_2.0_release_notes
Un saludo.
Re: Problema con sentencia SQL
¿Podríais confirmarme si el siguiente uso de get_record() es correcto para 2.0?:
Lo que quiero es obtener un registro de la tabla newmodule_table1 en la que 3 de sus campos coincidan con 3 variables.
Gracias.
Re: Problema con sentencia SQL
Re: Problema con sentencia SQL
Puedes investigar si existe ya un plugin que lo haga aquí:
http://moodle.org/mod/data/view.php?id=6009
O puedes empezar a desarrollar tú uno con la siguiente información: