2017-07-08 63 views
1

在我的控制器中,我有用於存儲和更新的方法。正如你看到的,我在$tour複製$request屬性的屬性逐一:複製類屬性中的所有請求屬性

class TourController extends Controller 
{ 
    public function store(Request $request, Tour $tour) 
     { 
      $tour->name = $request->name; 
      $tour->flight = $request->flight; 
      $tour->price = $request->price; 
      $tour->description = $request->description; 
      $tour->save(); 
      return redirect('home/tour/see'); 
     } 
    public function update(Request $request) 
     { 
      $tour = Tour::find($request->id); 
      $tour->name = $request->name; 
      $tour->flight = $request->flight; 
      $tour->price = $request->price; 
      $tour->description = $request->description; 
      $tour->save(); 
      return redirect('home/tour/see'); 
     } 
} 

看來,我重複我的代碼,我的問題是,有沒有辦法一次複製所有的人?如何複製遊覽屬性中的所有請求屬性?

回答

1

你也可以試試這個:

Tour::create($request->all()); 

更多 See laravel docs

0

是的,你可以做$tour = request()->all();同時

把所有的投入或者你可以做水木清華這樣的:

$tour = new Tour; 

$tour= save(request()->all()); 
+0

@AliSeyfi檢查我的編輯答案 –

+0

這使得$遊覽一個數組,那麼你就不能調用$ tour->保存()上它 –

+0

@AliSeyfi checagain –

0

創建一個類,它會從該請求的所有屬性和設置這些屬性。

class TourHydrator 

public function updateFromRequest(Request $request, Tour $tour) 
{ 
    $tour->name = $request->name; 
    $tour->flight = $request->flight; 
    $tour->price = $request->price; 
    $tour->description = $request->description; 
} 

然後inject它在你的控制器

class TourController extends Controller 
{ 

    /** 
    * @var TourHydrator 
    */ 
    private $tourHydrator; 

    public function __construct(TourHydrator $tourHydrator) 
    { 
     $this->tourHydrator = $tourHydrator; 
    } 

    public function store(Request $request, Tour $tour) 
    { 
     $this->tourHydrator->updateFromRequest($request, $tour); 
     $tour->save(); 
     return redirect('home/tour/see'); 
    } 

    public function update(Request $request) 
    { 
     $tour = Tour::find($request->id); 
     $this->tourHydrator->updateFromRequest($request, $tour); 
     $tour->save(); 
     return redirect('home/tour/see'); 
    } 
} 

我會推薦這種方法,而不是使用$request->all()因爲請求可能改變,因爲應用程序的發展。

您也可以爲實例增加validation和控制器,你可以把他們:

try { 
    $this->tourHydrator->updateFromRequest($request, $tour); 
    $tour->save(); 
    return redirect('home/tour/see'); 
} catch (SomeException $e) { 
    return redirect('home/tour/invalid'); 
} 

我也建議使用您的Tour模型gettest和setter方法,因爲有時神奇的方法可能會非常棘手特別是當它涉及進行測試。然後,您可以更改TourHydrator以使用適當的設置程序。