Buenas amigos,
mi problema es el siguiente:

Cuando intento guardar tanto editando como a la hora de añadir un
nuevo usuario, me guarda bien los datos, tanto del usuario como la
tabla relacionada usuarios_contratas, pero me el siguiente error:

Query: data
Warning: SQL Error: 1064: You have an error in your SQL syntax; check
the manual that corresponds to your MySQL server version for the right
syntax to use near 'data' at line 1 in C:\xampp\htdocs\GESINC\cake\libs
\model\datasources\dbo_source.php on line 440

Mirando las diferentes consultas que intenta hacer contra la base de
datos, me fijo que intenta ejecutar una consulta "data" y hay da el
error, pero no se porque intenta ejecutar esa consulta.

Trabajo con la version estable de cakephp y mysql.

Les pongo aqui los controladores y los modelos, a ver si alguien ve
por donde puede estar el fallo, ya que llevo varios dias mirando y
probando y no doy con el error.

<?php
class UsuariosController extends AppController {
        var $name ='Usuarios';
        var $layout = 'default';
        function login(){
                //No mostrar el mensaje de error si no se han proporcionado 
datos.
                $this->set('error', false);

                //Si un usuario ha proporcionado datos a través del formulario
                if (!empty($this->data)){
                        //Primero, veamos si hay usuarios en la base de datos
                        //con el nombre de usuario proporcionado por el usuario
                        //utilizando el formulario

                        $someone = 
$this->Usuario->findByLogin($this->data['Usuario']
['login']);

                        //En este punto, $someone está lleno con datos del 
usuario, o está
vacio.
                        //Comparemos la contraseña proporcionada a través del 
formulario
con la
                        //almacenada en la base de datos.
                        if(!empty($someone['Usuario']['password']) && 
($someone['Usuario']
['password'] == $this->data['Usuario']['password'])){
                                //Nota: esperanzado en que las contraseñas 
estén ofuscadas en la
base de datos,
                                //tu comparación podria verse más como:
                                //md5($this->data['Usuario']['password'] == ...

                                //Esto significa que estas son iguales. Ahora 
podemos contruir
alguna información básica de
                                //sesión para recordar este usuario como con 
'sesión-iniciada'

                                $this->Session->write('Usuario', 
$someone['Usuario']);

                                //Ahora que tenemos a los usuarios registrados 
en una sesión,
redireccionémoslos a
                                //la página de recibimiento para la aplicación.

                                $this->redirect('/empresas');
                        }
                        //Caso contrario, han provisto datos incorrectos:
                        else {
                                //Recuerdas la variable $error en la vista? 
Cambiemos su valor a
verdadero:
                                $this->set('error', true);
                        }
                }
        }

        function logout(){
                //Redirecciona usuarios a esta acción si hacen click en el botón
Cerrar Sesión.
                //Todos lo que necesitamos hacer aquí es destruir la 
información de
sesión.
                $this->Session->delete('Usuario');

                //Y problablemente deberíamos redireccionarlos a alguna parte,
también ...

                $this->redirect('/usuarios/login');
        }

        function index(){
                $this->Usuario->recursive = 0;
                $this->set('usuarios', $this->Usuario->findAll());
        }

        function view($id){
                $this->set('usuarios', $this->Usuario->read(null,$id));
                $this->set('contratasArray', $this->Usuario->Contrata-
>generateList());
        }

        function add (){
           if(empty($this->data)){
              $this->set('empresaArray',
                         $this->Usuario->Empresa->generateList());
              $this->set('contratasArray', $this->Usuario->Contrata-
>generateList());
              $this->set('usuarios', null);
           }
           else{
              if($this->Usuario->save($this->data)){
                 //$this->redirect('usuarios/index');
                 //$this->set('Correcto', 1);
                 $this->set('empresaArray',
                         $this->Usuario->Empresa->generateList());
                         $this->set('contratasArray',
                         $this->Usuario->Contrata->generateList());
              }
              else{
                 $data = $this->data;
                 $this->set('usuarios', $data);
                 $this->set('empresaArray',
                         $this->Usuario->Empresa->generateList());
                         $this->set('contratasArray',
                         $this->Usuario->Contrata->generateList());
              }
           }
        }

        function edit($id=null){
                if(empty($this->data)){
                        $this->Usuario->id = $id;
                        $this->data = $this->Usuario->read();
                        $data = $this->Usuario->read(null, $id);
                        $this->set('usuarios', $data);
                        $this->set('empresaArray',
                                                
$this->Usuario->Empresa->generateList());
                        $this->set('contratasArray',
                                                
$this->Usuario->Contrata->generateList());
                        foreach($data['Contrata'] as $var){
                                $contrata[$var['id']] = $var['id']; }
                        $this->set('selectedContrata', $contrata);
                }
                else {
                        if($this->Usuario->save($this->data)){
                                //$this->redirect('usuarios/index');
                                /*$data = $this->Usuario->read();
                                $this->set('usuarios', $data);

                                $this->set('empresaArray',
                                                        
$this->Usuario->Empresa->generateList());
                                $this->set('contratasArray',
                                                        
$this->Usuario->Contrata->generateList());
//                              echo $data['Contrata']['id'];
                                foreach($data['Contrata'] as $var){
                                        $contrata[$var['id']] = $var['id']; }
                                $this->set('selectedContrata', $contrata);
                                */
                        }
                        else {
                                /*$this->Usuario->id = $id;
                                $this->data = $this->Usuario->read();
                                $data = $this->Usuario->read(null, $id);
                                $this->set('usuarios', $data);

                                $this->set('empresaArray',
                                                        
$this->Usuario->Empresa->generateList());
                                $this->set('contratasArray',
                                                        
$this->Usuario->Contrata->generateList());
                                foreach($data['Contrata'] as $var){
                                        $contrata[$var['id']] = $var['id']; }
                                $this->set('selectedContrata', $contrata);
                                */
                        }
                }
        }

        function delete($id){
                $this->Usuario->del($id);
                $this->flash('Usuario eliminado.', '/usuarios/index');
        }
}
?>

<?php
class usuario extends AppModel {
        var $name = 'Usuario';

        var $defaultFields = 'nombre';

        var $belongsTo = array(
                                                'empresa' =>
                                                array ('className' => 'Empresa',
                                                                'Conditions' => 
'',
                                                                'order' => '',
                                                                'foreignKey' => 
'empresa_id',
                                                                'counterCache' 
=> ''),);

    var $hasAndBelongsToMany = array('Contrata' =>
                               array('className'    => 'Contrata',
                                     'joinTable'    =>
'usuarios_contratas',
                                     'foreignKey'   => 'usuario_id',
                                     'associationForeignKey'=>
'contrata_id',
                                     'conditions'   => '',
                                     'order'        => '',
                                     'limit'        => '',
                                     'unique'       => true,
                                     'finderQuery'  => '',
                                     'deleteQuery'  => '',
                               )
                               );


   var $validate = array(
      'login' => '/[a-z0-9\_\-]{3,}$/i',
      'password' => VALID_NOT_EMPTY
   );

   function beforeSave()
        {
            $this->data['Usuario']['password'] = md5($this->data('Usuario',
'password'));

            return true;
        }
}

?>

Aqui les dejo el modelo de contratas

<?php
class Contrata extends AppModel {
        var $name = 'Contrata';
        var $displayField = 'nombre';

        var $belongsTo = array(
            'empresa' =>
             array('className' => 'Empresa',
                   'conditions' => '',
                   'order' => '',
                   'foreignKey' => 'empresa_id',
                   'counterCache' => ''),
            'tipocontrata' =>
                        array('className' => 'Tipocontrata',
                                        'conditions' => '',
                                        'order' =>'',
                                        'foreignKey' => 'tipocontrata_id',
                                        'counterCache' => ''),);

}
?>

Aqui les pongo la estructura de las tablas:

CREATE TABLE `usuarios` (
  `id` int(11) NOT NULL auto_increment,
  `nombre` varchar(20) collate latin1_general_ci NOT NULL,
  `login` varchar(20) collate latin1_general_ci NOT NULL,
  `password` varchar(50) collate latin1_general_ci NOT NULL,
  `rol` char(1) collate latin1_general_ci NOT NULL,
  `empresa_id` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1
COLLATE=latin1_general_ci;

CREATE TABLE `contratas` (
  `id` int(11) NOT NULL auto_increment,
  `nombre` varchar(40) collate latin1_general_ci default NULL,
  `empresa_id` int(11) NOT NULL,
  `tipocontrata_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `contratas_fk` (`empresa_id`),
  KEY `contratas_fk1` (`tipocontrata_id`),
  CONSTRAINT `contratas_fk` FOREIGN KEY (`empresa_id`) REFERENCES
`empresas` (`id`),
  CONSTRAINT `contratas_fk1` FOREIGN KEY (`tipocontrata_id`)
REFERENCES `tipocontratas` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
COLLATE=latin1_general_ci;

CREATE TABLE `usuarios_contratas` (
  `usuario_id` int(11) NOT NULL,
  `contrata_id` int(11) NOT NULL,
  PRIMARY KEY  (`usuario_id`,`contrata_id`),
  KEY `usuario_contratas_fk1` (`contrata_id`),
  CONSTRAINT `usuario_contratas_fk` FOREIGN KEY (`usuario_id`)
REFERENCES `usuarios` (`id`),
  CONSTRAINT `usuario_contratas_fk1` FOREIGN KEY (`contrata_id`)
REFERENCES `contratas` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

Gracias a todos.
--~--~---------~--~----~------------~-------~--~----~
Has recibido este mensaje porque estás suscrito a Grupo "CakePHP-es" de Grupos 
de Google.
 Si quieres publicar en este grupo, envía un mensaje de correo 
electrónico a [email protected]
 Para anular la suscripción a este grupo, envía un mensaje a [EMAIL PROTECTED]
 Para obtener más opciones, visita este grupo en 
http://groups.google.com/group/CakePHP-es?hl=es.

-~----------~----~----~----~------~----~------~--~---

Responder a