2017-08-02 37 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

我仍然想更多地使用模型,目前我覺得我沒有使用它的'空間',只爲關係定義它,如果我可以在模型中使用該代碼,有什麼辦法嗎? –