2017-08-02 39 views
0

我的问题是关于如何分割这段代码。我有一个登记表,它的保存功能是这样的:Laravel控制器,移动创建和更新到模型?

public function store(EntityRequestCreate $request) 
{ 
    $geoloc = new Geoloc; 
    $geoloc->lat = $request->input('lat'); 
    $geoloc->lng = $request->input('lng'); 
    $geoloc->slug = $request->input('name'); 
    $geoloc->save(); 

    $user_id = Auth::id(); 
    $entity = new Entity; 
    $entity->name = $request->input('name'); 
    $entity->type = $request->input('type'); 
    $entity->email = $request->input('email'); 
    $entity->tags = $request->input('tags'); 
    $entity->_geoloc()->associate($geoloc); 
    $entity->save(); 

    $entity_id = $entity->id; 

    $address = new Address; 
    $address->building_name = $request->input('building_name'); 
    $address->address = $request->input('address'); 
    $address->town = $request->input('town'); 
    $address->postcode = $request->input('postcode'); 
    $address->telephone = $request->input('telephone'); 
    $address->entity_id = $entity_id; 
    $address->save(); 

    $role = User::find($user_id); 
    $role->role = "2"; 
    $role->save(); 

    DB::table('entity_user')->insert(array('entity_id' => $entity_id, 'user_id' => $user_id)); 

    $result = $geoloc->save(); 
    $result2 = $entity->save(); 
    $result3 = $address->save(); 
    $result4 = $role->save(); 

    if ($result && $result2 && $result3 && $result4) { 
     $data = $entity_id; 
    } 
    else { 
     $data = 'error'; 
    } 

    return redirect('profile/entity'); 
} 

正如你看到的,它有一个自定义的请求,它是保存到3种型号,这样我的控制器代码是太长了(有许多其他函数等)而是我想将这些代码移到模型中,因为我的模型到目前为止只有定义的关系。但是我不完全知道如何从控制器调用模型,我是否必须调用它,否则它会自动执行它?关于如何分割代码的任何其他想法?

回答

0

您可以使用模型create方法使此代码更短,更具可读性。

例如:

$geoloc = Geoloc::create(
    $request->only(['lat', 'lng', 'name']) 
); 

$entity = Entity::create(
    $request->only(['name', 'type', 'email', 'tags]) 
); 
$entity->_geoloc()->associate($geoloc); 

$address = Address::create([ 
    array_merge(
     ['entity_id' => $entity->id], 
     $request->only(['building_address', 'address', 'town']) 
    ) 
]) 

... 

create方法将创建从一个给定的相关联的阵列中的对象。请求对象上的only方法将只返回给定键的字段的关联数组。

+0

我仍然想更多地使用模型,目前我觉得我没有使用它的'空间',只为关系定义它,如果我可以在模型中使用该代码,有什么办法吗? –