Re: [CakePHP-esp] Re: Problemas con CakePHP 2.2.3 y Postgresql 8.4

82 views
Skip to first unread message

romel javier gomez herrera

unread,
Oct 19, 2012, 8:09:55 PM10/19/12
to cakep...@googlegroups.com
hola chopite. que imprime $this->request, quiero ver como queda el array que sera guardado.  

Como es la tabla  aspectos_interes

Colocale namespace también al primer modelo. 

<?php
echo $this->Form->input('Proyecto.tipo_proyecto_id',array('label'=>'Tipo de proyecto','options'=>$tipo_proyectos))
echo $this->Form->input('Proyecto.localidad_id',array('label'=>'Localidad','id'=>'LocalidadId'));
echo $this->Form->input('Proyecto.cliente_id',array('label'=>'Cliente'));
echo $this->Form->input('Proyecto.nombre',array('label'=>'Nombre'));
echo $this->Form->input('Proyecto.tipo_proyecto_id',array('label'=>'Tipo de proyecto','options'=>$tipo_proyectos))
echo $this->Form->input('Proyecto.localidad_id',array('label'=>'Localidad','id'=>'LocalidadId'));
echo $this->Form->input('Proyecto.cliente_id',array('label'=>'Cliente'));
echo $this->Form->input('Proyecto.nombre',array('label'=>'Nombre'));    
echo $this->Form->input('AspectosInteres.salud_publica',array('label'=>'Salud Publica'));
echo $this->Form->input('AspectosInteres.fenomenos_sociales',array('label'=>'Fenomenos sociales'));
echo $this->Form->input('AspectosInteres.vialidad',array('label'=>'Vialidad'));


Pd: 
- Los modelos van en singular. "AspectosInteres". 
- Inabilita el formulario y arma un array con data de prueba e intenta guardar, para ir descartando. 
- Tip: es mejor tener los modelos en ingles, no cusan problemas, el inflector del nucleo de cake no se comporta bien con el español. http://book.cakephp.org/2.0/en/core-utility-libraries/inflector.html y cake lo usa para determinar el plural y el singular. De otra forma hay que configura un poco mas es decir hay que crear las clase o modelos independientemente si no llevan casi nada. Solo la declaración.  


saludos.


El 19 de octubre de 2012 13:56, wchopite <wcho...@gmail.com> escribió:
Continuacion:


Y quiero agregar en una sola vista los datos del proyecto y de sus aspectos de interes:

<?php
            echo $this->Form->input('tipo_proyecto_id',array('label'=>'Tipo de proyecto','options'=>$tipo_proyectos))
            echo $this->Form->input('localidad_id',array('label'=>'Localidad','id'=>'LocalidadId'));
            echo $this->Form->input('cliente_id',array('label'=>'Cliente'));
            echo $this->Form->input('nombre',array('label'=>'Nombre'));   
            echo $this->Form->input('AspectosInteres.salud_publica',array('label'=>'Salud Publica'));
            echo $this->Form->input('AspectosInteres.fenomenos_sociales',array('label'=>'Fenomenos sociales'));
            echo $this->Form->input('AspectosInteres.vialidad',array('label'=>'Vialidad'));
?>

Cuando intento usar el metodo $this->Proyecto->saveAssociated($this->request->data) en el modelo de Proyectos, me arroja el siguiente error:

Error: SQLSTATE[42P01]: Undefined table: 7 ERROR: no existe la relación «proy_aspectos_interes_id»

Alguna idea de por que esto..?

De antemano muchas gracias, y disculpen el error de tipeo
               


El viernes, 19 de octubre de 2012 13:53:19 UTC-4:30, wchopite escribió:
Saludos comunidad. Acudo a ustedes por una duda. Tengo lo siguientes modelos:

/app/Plugin/Proyectos/Model/Proyecto.php:

public $hasOne = array(
        'AspectosInteres' => array(
            'className' => 'Proyectos.AspectosInteres',
            'foreignKey' => 'proyecto_id',
            'dependent' => true
        )
 );

/app/Plugin/Proyectos/Model/AspectosInteres.php:

public $belongsTo = array(
        'Proyecto'=>array(
            'className'=>'Proyectos.Proyecto',
            'foreignKey'=>'proyecto_id'
        )
    );

Y quiero agregar en una sola vista los datos del proyecto y de sus aspectos de interes:

<?php
echo $this->Form->input('tipo_proyecto_id',array('label'=>'Tipo de proyecto','options'=>$tipo_proyectos))
                    echo $this->Form->input('localidad_id',array('label'=>'Localidad','id'=>'LocalidadId'));
                    echo $this->Form->input('cliente_id',array('label'=>'Cliente'));
                    echo $this->Form->input('nombre',array('label'=>'Nombre'));   
               


--
Has recibido este mensaje porque estás suscrito al grupo "CakePHP en Español" de Grupos de Google.
Para ver este debate en la Web, visita https://groups.google.com/d/msg/cakephp-esp/-/molH3fZqK8cJ.

Para publicar una entrada en este grupo, envía un correo electrónico a cakep...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a cakephp-esp...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/cakephp-esp?hl=es.

Wladimir Chopite

unread,
Oct 22, 2012, 11:38:48 AM10/22/12
to cakep...@googlegroups.com
Buenos dias man! Ok, voy a imprimir el $this->request y te lo paso!

Mas tarde leo bien todos tus correos. Solo vi una imagen de un form donde agregas "familias". Me gusto mucho la interfaz!

Yo salgo del work a las 4:30, ponte que ya a las 6 este tranquilo en el hotel y me pongo con mi portatil. Por ahora tengo que solucionar aqui en el trabajo, tu sabes como es!
--
Atentamente:
Wladimir J. Chopite G.
+58 424-9700264
Ingeniero de Sistemas
Maturin, Venezuela
Linux Registered User #549401
Hack the p
lanet

Wladimir Chopite

unread,
Oct 22, 2012, 11:45:43 AM10/22/12
to cakep...@googlegroups.com
Aqui esta la info detallada:

/App/Plugin/Proyectos/Model/Proyecto.php:

<?php
/**
 * Modelo que permite operaciones sobre la tabla "proy_proyectos"
 * de la base de datos.
 *
 * @package     Plugin.Proyectos
 * @subpackage  Model
 * @author      ChopiteW <Chop...@bieloven.com.ve>
 * @todo
 * @version    2
 */
class Proyecto extends ProyectosAppModel {
    /**
     * Nombre del modelo "Proyecto".
     * @var String
     */
    public $name="Proyecto";
   
    /**
     * Tabla de la base de datos a utilizar por el Modelo (proy_proyectos).
     * @var String
     */
    public $useTable = 'proy_proyectos';
   
    /**
     * Array que define relacion "1-1" con el modelo "Proyectos.AspectosInteres".
     * @var array
     */

    public $hasOne = array(
        'AspectosInteres' => array(
            'className' => 'Proyectos.AspectosInteres',
            'foreignKey' => 'proyecto_id',
            'dependent' => true
        )
    );
   
    /**
     * Array que define relacion "N-1" con el modelo "Proyectos.Proyecto".
     * @var array
     */
    public $belongsTo = array(
        'Localidad'=>array(
            'className'=>'Regiones.Localidad',
            'foreignKey'=>'localidad_id'
        ),
        'TipoProyecto'=>array(
            'className'=>'Proyectos.TipoProyecto',
            'foreignKey'=>'tipo_proyecto_id'
        ),
        'Cliente'=>array(
            'className'=>'Miscelaneas.Cliente',
            'foreignKey'=>'cliente_id'
        )  
    );
   
    /**
     * Define las condiciones de validacion
     * de los campos del modelo.
     *
     * Reglas y campos:
     *
     * 1) nombre: Este campo almacena el nombre del pais.
     * 
     *     Reglas aplicadas:
     *
     *     a) nombre_unico: Que el nombre sea unico. No deben existir 2 registros
     *     con el mismo valor en el campo nombre (isUnique).
     *
     *     b) campo_no_vacio: Es obligatorio indicar un valor para proceder al
     *     al guardado de los datos (notEmpty).
     *
     *     c) tam_minimo: El nombre debe tener al menos 4 caracteres (minLength).
     *
     * 2) tipo_proyecto_id: Almacena el id del tipo de proyecto asociado.
     *
     *     Reglas aplicadas:
     *
     *     a) campo_no_vacio: Es obligatorio indicar el tipo de proyecto.
     *
     * 3) pais_id: Indica el id del pais asociado.
     *
     *     Reglas aplicadas:
     *
     *     a) campo_no_vacio: Es obligatorio indicar el pais.
     *
     * 4) estado_id: Indica el id del estado asociado.
     *
     *     Reglas aplicadas:
     *
     *     a) campo_no_vacio: Es obligatorio indicar el estado.
     *
     * 5) localidad_id: Almacena el id de la localidad asociada.
     *
     *     Reglas aplicadas:
     *
     *     a) campo_no_vacio: Es obligatorio indicar la localidad.
     *
     * 6) cliente_id: Almacena el id del cliente asociado.
     *
     *     Reglas aplicadas:
     *
     *     a) campo_no_vacio: Es obligatorio indicar el cliente.
     *
     * 7) codigo_conjunto: Almacena el codigo del proyecto. Una nomenclatura en
     * estandar sismico para nombrar los proyectos.
     *
     *     Reglas aplicadas:
     *
     *     a) nombre_unico: Que el codigo conjunto sea unico. No deben existir 2 registros
     *     con el mismo valor en este campo (isUnique).
     *
     *     b) campo_no_vacio: Es obligatorio indicar un valor para proceder al
     *     al guardado de los datos (notEmpty).
     *
     * 8) lider_proyecto: Almacena el nombre del lider de proyecto.
     *
     *     Reglas aplicadas:
     *
     *     a) campo_no_vacio: Es obligatorio indicar un valor para proceder al
     *     al guardado de los datos (notEmpty).
     *
     * 9) fecha_inicio: Almacena la fecha de inicio del proyecto.
     *
     *     Reglas aplicadas:
     *
     *     a) campo_no_vacio: Es obligatorio indicar un valor para proceder al
     *     al guardado de los datos (notEmpty).
     *
     * 10) fecha_culminacion: Almacena la fecha de culminacion del proyecto.
     *
     *     Reglas aplicadas:
     *
     *     a) campo_no_vacio: Es obligatorio indicar un valor para proceder al
     *     al guardado de los datos (notEmpty).
     *
     * @var array
     * @todo
     */
    public $validate = array(
        'nombre'=>array(
            'nombre_unico'=>array(
                'rule'=>'isUnique',
                'message' => 'Este pais ya fue registrado'
            ),           
            'campo_no_vacio'=> array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar el nombre del pais'
            ),
            'tam_minimo'=>array(
                'rule' => array('minLength', 4),
                'message' => 'El nombre debe tener al menos 4 caracteres'
            )
        ),
        'tipo_proyecto_id'=>array(
            'campo_no_vacio'=>array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar el tipo de proyecto'   
            )           
        ),
        'pais_id'=>array(
            'campo_no_vacio'=>array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar el pais'
            )
        ),
        'estado_id'=>array(
            'campo_no_vacio'=>array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar el estado'
            )
        ),
        'localidad_id'=>array(
            'campo_no_vacio'=>array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar la localidad'
            )
        ),
        'cliente_id'=>array(
            'campo_no_vacio'=>array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar el cliente'
            )
        ),
        'codigo_conjunto'=>array(
            'nombre_unico'=>array(
                'rule'=>'isUnique',
                'message' => 'Este codigo ya fue registrado'
            ),           
            'campo_no_vacio'=> array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar el codigo conjunto del proyecto'
            )
        ),
        'lider_proyecto'=>array(
            'campo_no_vacio'=>array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar el lider de proyecto'
            )
        ),
        'fecha_inicio'=>array(
            'campo_no_vacio'=>array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar la fecha de inicio del proyecto'
            )
        ),
        'fecha_culminacion'=>array(
            'campo_no_vacio'=>array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar la fecha de culminacion del proyecto'
            )
        )
    );
   
    /**
     * Callback del Modelo. Pasa el nombre del proyecto a mayusculas justo
     * antes de validar los datos para el guardado del registro ($this->data['Proyecto']['nombre]).
     *    
     * @author  Wladimir Chopite <Chop...@bieloven.com.ve>
     * @param   void
     * @return  boolean
     * @todo 
     * @version 1
     */
    public function beforeValidate() {
        $this->data['Proyecto']['nombre'] = strtoupper($this->data['Proyecto']['nombre']);
        return true;
    }
}
?>

/App/Plugin/Proyectos/Model/AspectosInteres.php:

<?php
/**
 * Modelo que permite operaciones sobre la tabla "proy_aspectos_interes"
 * de la base de datos. Posee una relacion "1-1" con el modelo "Proyecto".
 *
 * @package     Plugin.Proyectos
 * @subpackage  Model
 * @author      ChopiteW <Chop...@bieloven.com.ve>
 * @todo
 * @version    1
 */
class AspectosInteres extends ProyectosAppModel {
    /**
     * Nombre del modelo "AspectosInteres".
     * @var  String
     */
    public $name = "AspectosInteres";
   
    /**
     * Tabla de la base de datos a utilizar por el Modelo (proy_aspectos_interes).
     * @var String
     */
    public $useTable = 'proy_aspectos_interes';
   
    /**
     * Array que define relacion "1-1" con el modelo "Proyectos.Proyecto".
     * @var array
     */

    public $belongsTo = array(
        'Proyecto'=>array(
            'className'=>'Proyectos.Proyecto',
            'foreignKey'=>'proyecto_id'
        )
    );
   
    /**
     * Define las condiciones de validacion
     * de los distintos campos del modelo.
     *
     * Reglas y campos:
     *
     * 1) proyecto_id: Este campo almacena el id del proyecto asociado.
     * 
     *     Reglas aplicadas:
     *
     *     a) campo_no_vacio: Es obligatorio indicar un valor para proceder al
     *     al guardado de los datos (notEmpty).
     *
     * @var array
     * @todo
     */
    public $validate = array(
        'proyecto_id'=>array(           
            'campo_no_vacio'=> array(
                'rule'=>'notEmpty',
                'message'=>'Debe indicar el nombre del tipo de proyecto'
            )
        )
    );
}
?>

En cuanto a las vistas, en los 2 primeros correos estan. y el debug del $this->request te la paso a continuacion:

object(CakeRequest) {
	params => array(
		'plugin' => 'proyectos',
		'controller' => 'proyectos',
		'action' => 'nuevo',
		'named' => array(),
		'pass' => array()
	)
	data => array(
		'Proyecto' => array(
			'tipo_proyecto_id' => '50800565-5c30-489b-8f46-08f8c0a80149',
			'pais_id' => '50338a1d-a140-4da0-8642-0eb83cec18a5',
			'estado_id' => '50338a27-b794-4ebc-929d-0eb83cec18a5',
			'localidad_id' => '50338a32-5780-4d4c-9f29-0eb83cec18a5',
			'cliente_id' => '507f0897-75e4-48c2-abc2-08f8c0a80149',
			'nombre' => 'Rio Claro',
			'codigo_conjunto' => 'RC-11M-3D-3C',
			'lider_proyecto' => 'Rene Lopez',
			'fecha_inicio' => array(
				'month' => '10',
				'day' => '22',
				'year' => '2012'
			),
			'fecha_culminacion' => array(
				'month' => '10',
				'day' => '22',
				'year' => '2012'
			),
			'extension_geografica' => '',
			'comentarios' => ''
		),
		'AspectosInteres' => array(
			'salud_publica' => '',
			'fenomenos_sociales' => '',
			'vialidad' => 'Buena vialidad',
			'otros_proyectos_realizados' => '',
			'infraestructura_industrial' => '',
			'explotacion_suelo' => ''
		)
	)
	query => array()
	url => 'proyectos/proyectos/nuevo'
	base => ''
	webroot => '/'
	here => '/proyectos/proyectos/nuevo'
}




El 19 de octubre de 2012 19:39, romel javier gomez herrera <bmxquiks...@gmail.com> escribió:

Wladimir Chopite

unread,
Oct 22, 2012, 11:55:58 AM10/22/12
to cakep...@googlegroups.com
Listo man, ya solucione. Con tu comentario de que querias ver la estructura de la tabla "aspectos_interes", me puse a revisar. Simplemente agregue un campo "id" como clave primaria que no lo tenia y funciono perfectamente!

Muchas gracias por tu apoyo. Estamos en contacto

El 19 de octubre de 2012 19:39, romel javier gomez herrera <bmxquiks...@gmail.com> escribió:

romel javier gomez herrera

unread,
Oct 22, 2012, 4:54:03 PM10/22/12
to cakep...@googlegroups.com
Que fino chopite que hayas solucionado.  Saludos. 
Reply all
Reply to author
Forward
0 new messages