find

edited diciembre 2010 in Dudas/Problemas
buenas amigos estoy tratandod e hacer crud y en la parte de la edicion no poseo un id para la busqueda mi pk declarada en el modelo es nom_perfil como pueden ver

esto es en el controller
/**
     * Edita un Registro
     */
    public function edit($nom_perfil = null)
    {
        $perfil = new PerfilRol();
    	if($nom_perfil != null){
    	    //Aplicando la autocarga de objeto, para comenzar la edición
            $this->PERFIL_ROL = $perfil->find("conditions: nom_perfil = '$nom_perfil'");
    	}
        //se verifica si se ha enviado el formulario (submit)
        if($this->has_post('PERFIL_ROL')){

            if(!$perfil->update($this->post('PERFIL_ROL'))){
                Flash::error('Falló Operación');
                //se hacen persistente los datos en el formulario
                $this->PERFIL_ROL = $this->post('PERFIL_ROL');
            } else {
                flash::success("Actualizado");
                Router::route_to('action: index');
            }
        }
    }

esta es la vista
<div id='logo-kumbia'><?php //echo img_tag('default/kumbia.png') ?></div>

<div id="info">
<?php View::content(); ?>
<?php echo form_tag('menus_hola/edit/') ?>
<table border="0" cellspacing="1" width="30%">
    <tr><h3>Actualizar Perfil</h3>
    <tr></tr>
        <td>Nombre del Perfil:</td>
        <td><?php echo text_field_tag(array('menus_hola.nombre')) ?></td>
    </tr>
    <tr>
        <td>Descripcion del Perfil:</td>
        <td><?php echo text_field_tag(array('menus_hola.titulo')) ?></td>
    </tr>
    <tr>
        <td> </td>
        <?php echo hidden_field_tag(array('menus_hola.id')) ?>
        <td><?php echo submit_tag('Actualizar') ?></td>
    </tr>
</table>
    <? print_r($menus_hola) ?>
<?php echo end_form_tag() ?><br>
</div>

como esto la busqueda se realiza por imprimo todo el arreglo q trae los datos y alli estan pero no funciona la auto carga en los campos.

este es lo q obtengo
Array ( [0] => PerfilRol Object ( [primary_key] => Array ( [0] => nom_perfil [1] => nom_perfil ) [logger] => 1 [db] => DbOracle Object ( [id_connection] => Resource id #29 [last_result_query] => Resource id #43 [last_query:private] => [lastError] => [autocommit:private] => [num_rows:private] => [debug] => [logger] => 1 [lastQuery] => SELECT nom_perfil,desc_perfil,rol_asociado FROM perfil_rol WHERE nom_perfil = 'oficina' ) [database:protected] => [schema:protected] => [source:protected] => perfil_rol [count] => [fields] => Array ( [0] => nom_perfil [1] => desc_perfil [2] => rol_asociado ) [non_primary] => Array ( [0] => desc_perfil [1] => rol_asociado ) [not_null] => Array ( [0] => nom_perfil [1] => desc_perfil [2] => rol_asociado ) [_with_default:protected] => Array ( ) [attributes_names] => Array ( [0] => nom_perfil [1] => desc_perfil [2] => rol_asociado ) [is_view] => [debug] => [persistent] => [_validates:protected] => Array ( [inclusion_in] => Array ( ) [exclusion_of] => Array ( ) [numericality_of] => Array ( ) [format_of] => Array ( ) [date_in] => Array ( [0] => f_actual ) [email_in] => Array ( ) [uniqueness_of] => Array ( [0] => nom_usr [1] => nom_perfil ) ) [_in:protected] => Array ( ) [_at:protected] => Array ( ) [_where_pk:protected] => [_dumped:protected] => 1 [_dump_lock:protected] => [_data_type:protected] => Array ( [nom_perfil] => varchar2 [desc_perfil] => varchar2 [rol_asociado] => varchar2 ) [_has_one:protected] => Array ( ) [_has_many:protected] => Array ( ) [_belongs_to:protected] => Array ( ) [_has_and_belongs_to_many:protected] => Array ( ) [parent_of] => Array ( ) [nom_perfil] => oficina [desc_perfil] => oficina [rol_asociado] => oficina ) )

otra cosa q pude notar fue q quitando la condicion asi
$this->PERFIL_ROL = $perfil->find($nom_perfil);

y dejando lo de esa forma busca y carga los campos solo donde el nom_perfil sea puros numeros. expliqueme y ayudademe a realizar la auto carga con el nom_perfil.

gracias

Comentarios

  • edited 12:09
    la autocarga funciona de esta manera

    si tienes en la vista esto:
    text_field_tag(array('menus_hola.nombre'))

    te das cuenta que estas creando un array llamado menus_holas

    por lo tanto cuendo realizes la busqueda debes cargar ese ese array en el controller de esta manera:

    $this->menus_hola = $perfil->find("conditions: nom_perfil = '$nom_perfil'");
  • edited 12:09
    disculpa me equivoq con la vista esa es de un ejemplo q si funciona porq tengo id en la tabla esta es la visata q estoy usando
    <div id='logo-kumbia'><?php //echo img_tag('default/kumbia.png') ?></div>
    
    <div id="info">
    <?php View::content(); ?>
    <?php echo form_tag('PERFIL_ROL/edit/') ?>
    <table border="0" cellspacing="1" width="30%">
        <tr><h3>Actualizar Perfil</h3>
        <tr></tr>
            <td>Nombre del Perfil:</td>
            <td><?php echo text_field_tag(array('PERFIL_ROL.nom_perfil')) ?></td>
        </tr>
        <tr>
            <td>Descripcion del Perfil:</td>
            <td><?php echo text_field_tag(array('PERFIL_ROL.desc_perfil')) ?></td>
        </tr>
        <tr>
            <td>Rol asociado al Perfil:</td>
            <td><?php echo text_field_tag(array('PERFIL_ROL.rol_asociado')) ?></td>
        </tr>
        <tr>
            <td> </td>
            <td><?php echo submit_tag('Actualizar') ?></td>
        </tr>
    </table>
    <?php echo end_form_tag() ?>
    <?php echo end_form_tag() ?><br>
    <? print_r($PERFIL_ROL) ?>
    </div>
    



    y con este controlador
    /**
         * Edita un Registro
         */
        public function edit($nom_perfil = null)
        {
            $perfil = new PerfilRol();
           if($nom_perfil != null){
               //Aplicando la autocarga de objeto, para comenzar la edición
                $this->PERFIL_ROL = $perfil->find("conditions: nom_perfil = '$nom_perfil'");
           }
            //se verifica si se ha enviado el formulario (submit)
            if($this->has_post('PERFIL_ROL')){
    
                if(!$perfil->update($this->post('PERFIL_ROL'))){
                    Flash::error('Falló Operación');
                    //se hacen persistente los datos en el formulario
                    $this->PERFIL_ROL = $this->post('PERFIL_ROL');
                } else {
                    flash::success("Actualizado");
                    Router::route_to('action: index');
                }
            }
        }
    
Sign In or Register to comment.