2016-11-16 3 views
0

をコントローラにビューからオブジェクトを渡しMy class/Object Userには、完了したタスクのリスト(タスクをUser_taskテーブルに追加する)にタスクを追加するaddToCompletedTasks(タスクタスク)関数があります。Laravelは、これら3つのテーブルを考えると、ベストプラクティスを探し

完了したタスクを自分のコントローラーに送信するためのベストプラクティスを探しています。 今私はIDを送信していますが、オブジェクトを送信することができるかどうか疑問に思っています。コントローラでタスクをインスタンス化して、完了したタスクリストに追加する必要はありません。

public function tasks(){ 
    return $this->belongsToMany('Task'); 
} 

そして、あなたのコントローラでこれを持っている:

public function insertCompletedTask(Request $request) 
{ 
     $task_id = $request->input('task_id'); 

     $user = \Auth::user(); 

     $task = Task::whereId($task_id)->first(); 
     $update = $user->assignCompletedTask($task); 
} 

答えて

1

あなたが

Route::get('/your-url/{id}', '[email protected]'); 

はその後あなたがこの機能をお使いのユーザーモデルで宣言されている必要があり、ルートを経由してIDを送信する必要があります機能:

public function addCompletedTasks($id) { 
    // if you want to you can also just do 
    Auth::user()->tasks()->attach($id); 
} 

あなたの関数がそのようなことが必要となるURL内のIDを経由してリクエストにPOSTを経由して、それを送信しないようにしたい場合は、次のいずれかの場合には

public function addCompletedTasks(Request $request) { 
    Auth::user()->tasks()->attach($request->get('id')); 
} 

を使用すると、完全なPHPオブジェクトまたはあなたを送信することはできませんIDを送信するだけで、シリアル化してデシリアライズする必要があります。

私の意見では、タスクが最初にIDに関連しているかどうかを最初に確認する必要があります。しかし、あなたがデータベースレベルでこのコントロールを持っているなら、それは大丈夫です。

+0

これはまさに私がやっていることですが、タスクオブジェクトをインスタンス化するための最良の方法であるかどうか、そしてデータベースをクエリする必要があるかどうかと、完了したリスト仕事。 パフォーマンス面では、レコードUser_taskにレコードを挿入する方が高速になります。 – Andrew

+0

@Andrew完全なオブジェクトを最初にキャッチしたくない場合は、直接attachメソッドを実行できます。私の編集した答えを見てください:) – Roadirsh

+0

私が探していたもの! idをattach関数に送るだけで、今はすべて意味があります:) 多くの感謝! – Andrew

0

あなたは、このようなビューにデータを送り返すことができますビューを返す場合:

return view('view-name',array('variable_view' => $variable)); 

あなたがビューに変数として配列のキーを使用します。配列($ variable)の値はコントローラの変数です。だからあなたのビューでは、$ variable_viewを入力し、$変数を使用するので、ビューにタスクオブジェクトを送信することができます。

私の意見では、私はビューで可能な限り小さなPHPを使用します。

+0

申し訳ありませんが私の問題を正しく説明していない可能性があります。 オブジェクトをビューに渡す方法はわかっています。 しかし、私は自分のビューから自分のオブジェクトをコントローラに渡すようにしています。逆に、それはIDと一緒に働いていますが、それ以降のクエリのnbを減らすことが可能な場合、完全なオブジェクトを渡すべきではないかと思います。 – Andrew

関連する問題