Error al usar el array $primary_key en un modelo heredado de ActiveRecord

35 views
Skip to first unread message

Jameson Villanueva

unread,
Mar 20, 2010, 7:31:45 PM3/20/10
to KumbiaPHP Framework
Hola a todos, estoy trabajando con la beta2 de kumbiaphp con una base
de datos ya diseñada y que maneja su propio estandard a la hora de
definir nombres de claves primarias y foraneas, el asunto es el
siguiente, estoy tratando de definir en la clase usuarios de la
siguiente manera:

class Usuarios extends ActiveRecord {
//put your code here
public function initialize(){
$this->primary_key('cod_usuario');
}
}

donde cod_usuario es la clave primaria, como estoy trabajando en modo
de desarrollo el core me devuelve el siguiene mensaje:


KumbiaException: No existe el método 'primary_key' en
ActiveRecord::Usuarios (0)

En el archivo C:\xampp\htdocs\kumbia\core\libs\db\active_record_base
\active_record_base.php en la línea: 525

No me puedo dar el lujo de cambiar los campos de la base de datos.

Espero me puedan ayudar.

Saludos cordiales

José Alberto

unread,
Mar 20, 2010, 7:55:18 PM3/20/10
to kum...@googlegroups.com
Prueba esto:

$this->primary_key=array('cod_usuario');


--
Viva KumbiaPHP Framework!
 http://www.kumbiaphp.com/
 Ha recibido este mensaje porque está suscrito a Grupo "KumbiaPHP Framework" de Grupos de Google.
 Para obtener más opciones, visita este grupo en http://groups.google.com/group/kumbia?hl=es.

To unsubscribe from this group, send email to kumbia+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.

Jameson Villanueva

unread,
Mar 20, 2010, 8:53:20 PM3/20/10
to KumbiaPHP Framework
Hola Jose Alberto, gracias primero que nada por contestar, acabo de
poner en mi modelo la linea de codigo que me indicastes, ya no me
muestra el error pero no hace la insercion, al hacer una prueba
creando otra tabla y definiendo la llave primaria como id en ese
momento se realiza la insercion sin ningun problema, a continuacion
dejo el codigo, corregido como indicas:

--Query de la tabla--
CREATE TABLE `usuarios` (
`cod_usuario` int(11) NOT NULL AUTO_INCREMENT,
`nombres` varchar(60) NOT NULL,
`apellidos` varchar(60) NOT NULL,
`username` varchar(30) NOT NULL,
`clave` varchar(15) NOT NULL,
PRIMARY KEY (`cod_usuario`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

---Modelo----


class Usuarios extends ActiveRecord {
//put your code here
public function initialize() {

$this->primary_key=array('cod_usuario');
}
public function listarUsuarios(){
return $this->find();
}
}
?>
--Controlador--

Load::model('usuarios');

class UsuariosController extends ApplicationController {
//put your code here
public function index(){
$usuarios = new Usuarios();
$this->usuarios = $usuarios->listarUsuarios();
}
public function insertar(){
if(Input::hasPost('usuario')){
$usuario = new Usuarios(Input::post('usuario'));
if(!$usuario->save()){
Flash::error('Fallo Insercion');
}else
Flash::valid('Operacion exitosa');
}
}
}
?>
--Vista--
<table><?php echo Form::open('usuarios/insertar'); ?>
<tr><td>Nombres: <?php echo Form::text('usuario.nombres'); ?></
td></tr>
<tr><td>Apellidos: <?php echo Form::text('usuario.apellidos'); ?></
td></tr>
<tr><td>Username: <?php echo Form::text('usuario.username'); ?></
td></tr>
<tr><td>Clave: <?php echo Form::pass('usuario.clave'); ?></td></
tr>
<tr><td><?php echo Form::submit('Enviar'); ?></td></tr>
</table><?php echo Form::close(); ?>

Espero me puedas ayudar porque todas las tablas estan ya creadas con
su propio estandard el mismo que no puede ser modificado, si me
complico la vida con una insercion no me quiero imaginar con las
relaciones entre tablas

De antemano gracias a todos los que puedan leer el post

On 20 mar, 18:55, José Alberto <unjosealbe...@gmail.com> wrote:
> Prueba esto:
>
> $this->primary_key=array('cod_usuario');
>
> El 21 de marzo de 2010 00:31, Jameson Villanueva <

> jameson.villanu...@gmail.com> escribió:

Deivinson Tejeda

unread,
Mar 20, 2010, 10:36:53 PM3/20/10
to kum...@googlegroups.com
ninguna de las dos opciones va funcionar, la forma correctar es la siguiente

class Model extends ActiveRecord
{
    public $primary_key = array('cod_usuario');
}

Éxitos!

2010/3/20 José Alberto <unjose...@gmail.com>



--
Deivinson Tejeda (CaChi)
KumbiaPHP Framework Developer
http://www.kumbiaphp.com

Twitter @DeivinsonTejeda

Jameson Villanueva

unread,
Mar 21, 2010, 11:49:34 AM3/21/10
to KumbiaPHP Framework
Hola Deivinson, realice el cambio como tu me indicastes pero la
insercion no es realizada, el codigo del controlador para hacer la
insercion es la siguiente:

public function insertar(){
if(Input::hasPost('usuario')){
$usuario = new Usuarios(Input::post('usuario'));
if(!$usuario->save()){
Flash::error('Fallo Insercion');
}else
Flash::valid('Operacion exitosa');
}
}

no me muestra ningun mensaje de error, sin embargo al hacer un alter a
la tabla de esta forma:

ALTER TABLE `prueba`.`usuarios` CHANGE COLUMN `cod_usuario` `id`
INT(11) NOT NULL AUTO_INCREMENT,
DROP PRIMARY KEY,
ADD PRIMARY KEY (`id`);

la insercion se realiza y luego me lanza un error de este tipo

KumbiaException: Unknown column 'cod_usuario' in 'where clause' al
ejecutar <em>"SELECT id,nombres,apellidos,username,clave FROM usuarios
WHERE cod_usuario = '1' LIMIT 1"</em> (0)

seguramente por el alter a la tabla, favor darme una mano e indicarme
como uds proceden cuando tienen modelos ya definidos con anterioridad
y que no pueden ser modificados para trabajas con un CRUD

De nuevo reitero mi agradecimiento por leer este post


saludos cordiales


On 20 mar, 21:36, Deivinson Tejeda <deivinsontej...@kumbiaphp.com>
wrote:


> ninguna de las dos opciones va funcionar, la forma correctar es la siguiente
>
> class Model extends ActiveRecord
> {
>     public $primary_key = array('cod_usuario');
>
> }
>
> Éxitos!
>

> 2010/3/20 José Alberto <unjosealbe...@gmail.com>


>
>
>
> > Prueba esto:
>
> > $this->primary_key=array('cod_usuario');
>
> > El 21 de marzo de 2010 00:31, Jameson Villanueva <

> > jameson.villanu...@gmail.com> escribió:

Deivinson Tejeda

unread,
Mar 21, 2010, 3:07:57 PM3/21/10
to kum...@googlegroups.com
OK, ahora no entiendo que quieres hacer... reformula tu duda por favor...

Éxito!

2010/3/21 Jameson Villanueva <jameson.v...@gmail.com>
To unsubscribe from this group, send email to kumbia+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.



--
Deivinson Tejeda (CaChi)

Jameson Villanueva

unread,
Mar 21, 2010, 5:28:02 PM3/21/10
to KumbiaPHP Framework
Simplemente quiero hacer todas las operaciones del CRUD del tutorial
de la beta 2 pero con la estructura de la tabla citada anteriormente,
he aqui la estructura de una de las tablas del modelo existente:

CREATE TABLE `usuarios` (
`cod_usuario` int(11) NOT NULL AUTO_INCREMENT,
`nombres` varchar(60) NOT NULL,
`apellidos` varchar(60) NOT NULL,
`username` varchar(30) NOT NULL,
`clave` varchar(15) NOT NULL,
PRIMARY KEY (`cod_usuario`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

donde mi primary_key no tiene de nombre id conforme las convenciones
sugeridas por kumbia, sino cod_usuario, q es un estandard creado para
un sistema que esta funcionando actualmente y lo que deseo es hacer un
modulo web, espero haber sido mas claro, gracias por las respuestas


Saludos cordiales


On 21 mar, 14:07, Deivinson Tejeda <deivinsontej...@kumbiaphp.com>
wrote:


> OK, ahora no entiendo que quieres hacer... reformula tu duda por favor...
>
> Éxito!
>

> 2010/3/21 Jameson Villanueva <jameson.villanu...@gmail.com>

Jameson Villanueva

unread,
Mar 22, 2010, 1:54:26 AM3/22/10
to KumbiaPHP Framework
Alguien me puede indicar si en Kumbiaphp se puede usar el ActiveRecord
sin seguir la convencion sugeriada para los primarykey y foreignkey?


On 21 mar, 16:28, Jameson Villanueva <jameson.villanu...@gmail.com>
wrote:

Deivinson Tejeda

unread,
Mar 22, 2010, 8:34:47 AM3/22/10
to kum...@googlegroups.com
Para el ActiveRecord actual no es posible en el nuevo ActiveRecord (aun no esta disponible) si se podrá manejar esto mas libremente...

Sin embargo podrías usas las consultas, pero para un save() no te funcionara...

Éxitos...

2010/3/22 Jameson Villanueva <jameson.v...@gmail.com>
To unsubscribe from this group, send email to kumbia+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.



--
Deivinson Tejeda (CaChi)

Jameson Villanueva

unread,
Mar 22, 2010, 9:47:27 AM3/22/10
to KumbiaPHP Framework
Claro, de eso me había percatado de que las consultas si funcionan,
muchas gracias Deivinson por las respuestas y tu tiempo


Saludos cordiales,
Jameson

On 22 mar, 07:34, Deivinson Tejeda <deivinsontej...@kumbiaphp.com>
wrote:


> Para el ActiveRecord actual no es posible en el nuevo ActiveRecord (aun no
> esta disponible) si se podrá manejar esto mas libremente...
>
> Sin embargo podrías usas las consultas, pero para un save() no te
> funcionara...
>
> Éxitos...
>

> 2010/3/22 Jameson Villanueva <jameson.villanu...@gmail.com>

Deivinson Tejeda

unread,
Mar 22, 2010, 9:51:37 AM3/22/10
to kum...@googlegroups.com
Para los inserts pudieras utilizar la class DbBase....

2010/3/22 Jameson Villanueva <jameson.v...@gmail.com>
To unsubscribe from this group, send email to kumbia+unsubscribegooglegroups.com or reply to this email with the words "REMOVE ME" as the subject.



--
Deivinson Tejeda (CaChi)

Jameson Villanueva

unread,
Mar 22, 2010, 2:06:47 PM3/22/10
to KumbiaPHP Framework
Me puedes indicar por favor como usarla, y lo que tiene q ver con las
relaciones entre tablas, tendria el mismo problema por las
convenciones que no son las sugeridas?

On 22 mar, 08:51, Deivinson Tejeda <deivinsontej...@kumbiaphp.com>
wrote:


> Para los inserts pudieras utilizar la class DbBase....
>

> 2010/3/22 Jameson Villanueva <jameson.villanu...@gmail.com>

Reply all
Reply to author
Forward
0 new messages