Closed ghost closed 9 years ago
Puedes pasar el código para verlo ?
Hola, en tener una ventana de tiempo subo un repositorio.
Saludos!
----- Reply message ----- De: "Joan Miquel" notifications@github.com Para: "KumbiaPHP/ActiveRecord" ActiveRecord@noreply.github.com CC: "Nelson Alberto Rojas Nuñez" nelson.rojas.n@gmail.com Asunto: [ActiveRecord] Problemas al hacer insert con LiteRecord (#55) Fecha: mié., jul. 29, 2015 08:28 Puedes pasar el código para verlo ?
— Reply to this email directly or view it on GitHub.
No puedo volver a reproducir el problema. Puede ser que haya tenido algo que ver con el hecho de que la base de datos la generé usando un programa de diseño (DbWrench). Acabo de probar una inserción sencilla y lo ha creado al primer intento. Lo que no me ha creado es un atributo con el sufijo _at (que es de tipo datetime). De todos modos el código que acabo de probar es el siguiente:
//esquema de la tabla CREATE TABLE categoria ( id int(11) NOT NULL AUTO_INCREMENT, nombre varchar(200) NOT NULL, creado_at datetime DEFAULT NULL, slug varchar(200) DEFAULT NULL, icono varchar(40) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
//lite_record en app/lib/lite_record.php use Kumbia\ActiveRecord\LiteRecord as ORM;
class LiteRecord extends ORM { public static function listar() { return static::all("SELECT * FROM " . static::getSource()); }
public static function optionsForSelect($show)
{
return static::all("SELECT id, {$show} FROM " . static::getSource());
}
public static function getFirst($id)
{
return static::first("SELECT * FROM " . static::getSource() .
" WHERE id = " . (int)$id);
}
}
//modelo de categoria en app/models/categoria.php class Categoria extends LiteRecord {
}
//controller con las funciones basicas en app/cotrollers/categorias_controller.php class CategoriasController extends AppController { function index() { $this->categorias = Categoria::listar(); }
function agregar()
{
if (Input::hasPost('categoria')) {
$categoria = new Categoria(Input::post('categoria'));
if ($categoria->create()) {
Flash::valid('Categoria guardada exitosamente');
Redirect::to(); //index
}
}
}
}
//vista agregar.phtml
<?= Form::open(); ?> <?= Form::label('NOMBRE'); ?> <?= Form::text('categoria.nombre'); ?> <?= Form::label('SLUG'); ?> <?= Form::text('categoria.slug'); ?> <?= Form::label('ICONO'); ?> <?= Form::text('categoria.icono'); ?> <?= Form::submit('AGREGAR'); ?> <?= Form::close(); ?>
No especificas el error, para ayudarte. Pero si veo, que estas usando mal el LiteRecord, al usar los parámetros directamente en tu consulta, en vez de prepared query (que son seguras)
MAL static::all("SELECT id, {$show} FROM " . static::getSource()); BIEN static::all("SELECT id, ? FROM " . static::getSource(), $show);
MAL static::first("SELECT * FROM " . static::getSource() . " WHERE id = " . (int)$id); BIEN static::first("SELECT * FROM " . static::getSource() . " WHERE id = ?", (int)$id);
Además se pueden simplificar esas consultas
Leyendo otra vez, el LiteRecord no proporciona ni _at ni _in
Estimado Joanhey: Te agradezco el tiempo que dedicaste en responderme. Ciertamente tus comentarios me serán de gran utilidad para corregir los malos hábitos de programación.
Saludos cordiales :-)
2015-08-19 10:20 GMT-03:00 Joan Miquel notifications@github.com:
Leyendo otra vez, el LiteRecord no proporciona ni _at ni _in
— Reply to this email directly or view it on GitHub https://github.com/KumbiaPHP/ActiveRecord/issues/55#issuecomment-132592535 .
Nelson Rojas Nuñez Ingeniero de Ejecución en Computación e Informática (UCM Talca)
Correo: nelson.rojas.n@gmail.com / nelson_rojas_n@hotmail.com Sitio Web: http://nelsonrojas.wordpress.com Sitio Web Alternativo: http://profenelsonrojas.blogspot.com Canal de Youtube: https://www.youtube.com/nelsononrails
Hago el contexto en primer lugar. Tenía una app más menos armada en beta2, pero quería saber qué tal iría al cargarla sobre 1.0rc. Estuve realizando arreglos principalmente en lo que respecta a las consultas (SELECT) sin mayores complicaciones, pero a la hora de intentar hacer el proceso de creación (INSERT) éstos no pasan. Por lo que pude revisar, la problemática es que me genera el campo id en la lista de valores a insertar, y no cuadra el número de atributos versus el número de valores. He revisado la tabla y ésta cuenta con la definición de clave primaria (en el campo id), y es autoincremental. De hecho, los insert funcionan a la perfección usando beta2, pero algo extraño sucede con PDO a la hora de calcular la lista de atributos que no deben contemplarse en el insert.