如何在Laravel中重复数据检索代码?

时间:2015-01-22 03:51:48

标签: php laravel

情况:我获取了插入新数据并通过表单更新数据的数据。 因此,在表单中,如果用户尚未完成任何数据,则输入文本仅显示占位符。如果用户之前已经存储了数据,则输入文本显示已存储的数据,用户可以在必要时更新它们。

在我的控制器中,我从四个不同的表(模型)中检索数据。所以我首先实例化模型并检索数据,同时检查用户是否已经存储了每列的数据:

这是控制器代码:

//recuperar el id del usuario
        $id_user=Auth::user()->id;
        $usuario=User::find($id_user);
        if(isset($usuario->nombre_pila)){$nombrepila=$usuario->nombre_pila;}else{$nombrepila='';}
        if(isset($usuario->ap_paterno)){$ap_paterno=$usuario->ap_paterno;}else{$ap_paterno='';}

        //obtener datos de domicilio del usuario -------------------------------------------------------------------
        /**/$domicilio=$usuario->domicilio;/**/
        if(isset($domicilio->callenumero)){$callenumero=$domicilio->callenumero;}else{$callenumero='';}
        if(isset($domicilio->colonia)){$colonia=$domicilio->colonia;}else{$colonia='';}

        //----------------------------------------------------------------------------------------------------------
        //obtener datos de empresa en donde trabaja el usuario
        /**/$empresa=$usuario->empresa;/**/
        if(isset($empresa->nombre)){$nomempresa=$empresa->nombre;}else{$nomempresa='';}
        if(isset($empresa->puesto)){$puesto=$empresa->puesto;}else{$puesto='';}

        //----------------------------------------------------------------------------------------------------------
        //Obtener datos de estudios realizados
        /**/$estudios=$usuario->estudio;/**/
        if(isset($estudios->L_licenciatura)){$L_licenciatura=$estudios->L_licenciatura;}else{$L_licenciatura='';}
        if(isset($estudios->L_titulo)){$L_titulo=$estudios->L_titulo;}else{$L_titulo='';}

(检索到更多变量......)

然后我将此数据发送到视图:

return View::make('profile.edit2',array('id_user'=>$id_user, 'nombrepila'=>$nombrepila,'ap_paterno'=>$ap_paterno,
            'callenumero'=>$callenumero,'colonia'=>$colonia,'nomempresa'=>$nomempresa,'puesto'=>$puesto,'L_licenciatura'=>$L_licenciatura,
            'L_titulo'=>$L_titulo));

我重复了两次这段代码。我的问题是,我怎样才能使这个函数成为一个函数,所以我不必重复这段代码呢?

我想这个函数应该返回一个数组。我该怎么办? 如何不重复View::Make长数组

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

在你的模特上

public function getTemplateData(){
    return array('id_user' => $this->id,$some_fields->$this->thatfield,...);
}

回到控制器

$model = User::find($id_user)
return View::make('profile.edit2',$model->getTemplateData());

值得一提的是,Laravel已经内置了这种模式。请阅读本节(将模型转换为数组)http://laravel.com/docs/4.2/eloquent#converting-to-arrays-or-json

答案 1 :(得分:1)

这里有几个问题。

一,你正在使用Authfaçade提供的用户对象来重新获取同一个用户,除非你专门加载一大堆关系(你不是这样),这几乎是毫无意义的。

其次,您将一大堆属性提取到变量中,然后将它们压缩为视图的数组。您可以将用户直接传递到视图中。

尝试:

return View::make('profile.edit2',array('user'=>Auth::user()));

然后只访问视图中用户的属性。

提示:虽然在eloquent模型中的属性上的isset将返回true或false,如果您只是直接访问它,它将不会抛出未定义属性的通知,而只是{{1} }与代码中的null具有相同的效果。