Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Grabar clave foranea en Base de datos [Cakephp]

Estas en el tema de Grabar clave foranea en Base de datos [Cakephp] en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 22/02/2010, 09:48
 
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
  #2 (permalink)  
Antiguo 03/03/2010, 05:55
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Grabar clave foranea en Base de datos [Cakephp]

Hola, te falta añadir un nuevo controlador para la relación de publicaciones y usuario. Una vez que lo tengas implementado el metodo save de este controlador será tan fácil como utilizar lo siguiente:

function add(){
if (!empty($this->data)) {
$this->PublicacionesUsuario->create();
if ($this->PublicacionesUsuario->save($this->data)) {
$this->flash(__('PublicacionesUsuario saved.', true), array('action'=>'index'));
} else {
}
}
  #3 (permalink)  
Antiguo 03/03/2010, 10:16
 
Fecha de Ingreso: marzo-2010
Mensajes: 2
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Grabar clave foranea en Base de datos [Cakephp]

Se me olvido, se supone que debes de tener una tabla para la relacion de publicaciones y usuarios. Entonces tener el modelo PublicacionesUsuario y el controlador de éste.

Saludos,

Raul.

Etiquetas: cakephp, clave, grabar, foreignkey
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:33.