Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/02/2010, 09:48
_darkside_
 
Fecha de Ingreso: febrero-2010
Mensajes: 1
Antigüedad: 14 años, 2 meses
Puntos: 0
Grabar clave foranea en Base de datos [Cakephp]

Saludos. Soy novato en Programación orientada a objetos, he estado programando en php bajo el framework Cakephp - Manejador de Base de datos Mysql. He seguido su documentación. Tengo un problema cuando grabo la clave foranea aparece este error:

Warning (512): SQL Error: 1048: Column 'usuario_id' cannot be null [CORE/cake/libs/model/datasources/dbo_source.php, line 525]

Tengo un Modelo llamado Publicaciones relacionado con la tabla usuarios. Usando base de datos relacionales. Un usuario puede hacer muchas publicaciones (1:n) y Muchas Publicaciones pueden ser efectuadas por un usuario (n:1). Tengo sesiones de usuario con privilegios definidos. No logro que guarde en base de datos el campo usuario_id de la tabla publicaciones. Observen el método add() del Controlador:
PublicacionesController alli es donde necesito que guarde los datos, al incluir una nueva publicacion, debo verificar que el usuario haya iniciado sesion y por lógica el id del usuario (la clave foranea usuario_id) debe grabarse en la tabla de Publicaciones para saber que usuario hizo tal publicacion. Que podra ser lo que me falta para que funcione. En base de datos El campo usuario_id esta definido de la siguiente manera: `usuario_id` int(11) NOT NULL. Gracias de antemano

El codigo de los modelos, y controlador son los siguientes:

Modelo Usuario:
<?php
class Usuario extends AppModel

{

var $name = 'Usuario';
var $useTable = 'usuario';

var $validate = array(

'empleado_id' => VALID_NOT_EMPTY,

'perfil_id' => VALID_NOT_EMPTY,

'usuario' => VALID_NOT_EMPTY,

'clave' => VALID_NOT_EMPTY,

);
var $belongsTo = array('Empleado' =>

array('className' => 'Empleado',

'conditions' => '',

'order' => '',

'foreignKey' => 'empleado_id'

),

'Perfile' =>

array('className' => 'Perfile',

'conditions' => '',

'order' => '',

'foreignKey' => 'perfile_id'

)

);

var $hasMany = array('Publicacione' =>

array('className' => 'Publicacione',

'conditions' => '',

'order' => '',

'limit' => '',

'foreignKey' => 'usuario_id',

'dependent' => true,

'exclusive' => false,

'finderSql' => ''

),



);

}

?>

Modelo Publicacione:

<?php
class Publicacione extends AppModel {

var $name = 'Publicacione';
var $useTable = 'publicaciones';
var $validate = array(
'titulo' => array('alphanumeric'),
'cuerpo' => array('alphanumeric')*/
);


var $belongsTo = array('Usuario' =>

array('className' => 'Usuario',

'conditions' => '',

'order' => '',

'foreignKey' => 'usuario_id'

),

);
}
?>

Controlador Publicaciones:

<?php
class PublicacionesController extends AppController
{

var $name = 'Publicaciones';
var $helpers = array('Html','Form','Pagination','Ajax','Javascrip t','Fck');
var $components = array ('Pagination','Session');

var $uses = array ('Publicacione','Perfile','Usuario','Configuracion ','Empleado','Dependencia');

function beforeFilter()

{

$this->checkSession();

$this->datosEmpleado=$this->Session->read('Empleado.nombre');

$this->set('datos_empleado',$this->datosEmpleado);

$this->set('datos_menu',$this->menuPrincipal($this->Session->read('Usuario.perfile_id')));

$this->lista_permiso($this->params['controller'],$this->params['action']);


}

function lista_permiso($controlador,$accion){
$datos_lista=$this->Configuracion->findAll(' Configuracion.perfil_id='.$this->Session->read('Usuario.perfile_id'));
$encontrado=false;
foreach ($datos_lista as $registro){
$registro['Funcione']['direccion']=$registro['Funcione']['direccion'].'/';
list($contr,$acc)=split('[/ ]',$registro['Funcione']['direccion']);
//echo $contr.'->'.$acc.'<br>';
if ($acc=='') $acc='index';
if ( $contr.'/'.$acc==$controlador.'/'.$accion){
$encontrado=true;
}
}
if ($encontrado==false){
$this->Session->setFlash('<img src="'.IMAGES_URL.'img_acciones/dialog-information.png" align="absmiddle" alt="Ver Registro" title="Ver Registro"> Usted no tiene permiso para ver esta funcionalidad.');

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

}

function menuPrincipal($id)

{

return $this->Configuracion->menu($id);

}




function index()

{

$criteria=NULL;
list($order,$limit,$page) = $this->Pagination->init($criteria); // Added

$data = $this->Publicacione->findAll($criteria, NULL, $order, $limit, $page); // Extra parameters added

$this->set('data',$data);


}

function view($id)

{
$this->set('data', $this->Publicacione->read(null,$id));


}



function add()

{

if (empty($this->params['data']))

{


$this->render();

}

else

{


if ($this->Publicacione->save($this->params['data']))

{
$this->data['Publicacione']['usuario_id'] = $this->Usuario->id;
$this->Usuario->Publicacione->save($this->data);

$this->Session->setFlash('<img src="'.IMAGES_URL.'img_acciones/dialog-information.png" align="absmiddle" alt="Ver Registro" title="Ver Registro"> La Datos de la Publicación han sido Guardados.');

$this->redirect('/publicaciones');



}

else

{

$this->set('data', $this->params['data']);

$this->render('edit');

}

}

}

function edit($id=null)

{

if (empty($this->params['data']))

{


$this->data = $this->Publicacione->read(null,$id);

$this->render();

}

else

{

if ( $this->Publicacione->save($this->params['data']))

{

$this->Session->setFlash('<img src="'.IMAGES_URL.'img_acciones/dialog-information.png" align="absmiddle" alt="Ver Registro" title="Ver Registro"> Los Datos de la Publicación han sido Actualizados.');

$this->redirect('/publicaciones');

}

else

{

$this->set('data', $this->params['data']);

$this->render();

}

}

}


function delete($id)

{

if ($this->Publicacione->del($id))

{

$this->flash('La publicación con el id: '.$id.' ha sido eliminada.', '/publicaciones');

}

}


function buscar($id=NULL) {



$criteria=" Publicacione.codpublicacion like '".$id."%'";

if ($id==""){



$this->flash('Escriba en el campo buscar o Haga Click aqui para Actualizar la pagina.', '/publicaciones');

$data=array();

}else{

$data = $this->Publicacione->findAll($criteria); // Extra parameters added

if(count($data)<=0){

$this->flash('No se ha conseguido Registro. Escriba en el campo buscar o Haga Click aqui para Actualizar la pagina.', '/empleados');

}

}

$this->set('data',$data);

$this->render('buscar', 'ajax');

}
}

Última edición por _darkside_; 22/02/2010 a las 10:03