2016-11-16 139 views
0

尋找最佳實踐,考慮到這些3個表:Laravel傳遞對象從視圖到控制器

任務(ID,標題,描述) 用戶(ID,姓名) User_task(USER_ID,TASK_ID)

我的類/對象用戶有一個函數addToCompletedTasks(任務任務)將任務添加到他的完成任務列表(將任務添加到表User_task)。

我正在尋找最佳實踐,將完成的任務從我的視圖發送到我的控制器。 現在我正在發送一個ID,但我想知道是否可以發送該對象,所以我不必在我的控制器中實例化任務,將其添加到完成任務列表中。

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 tasks(){ 
    return $this->belongsToMany('Task'); 
} 

然後在你的控制器有這樣的功能:

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

如果你想通過ID通過POST發送的請求,而不是在你的URL的功能將需要是這樣的:

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到附加功能它現在使所有的意義:) 非常感謝! – Andrew

0

如果你回到你能數據發送回這樣的觀點一個觀點:

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

您將使用數組作爲視圖變量的關鍵。並且數組的值($ variable)是來自控制器的變量。所以在你的視圖中你可以輸入$ variable_view,它會使用$變量,所以你可以發送任務對象到視圖。

在我看來,我會盡可能在視圖中使用盡可能少的PHP。

+0

對不起,我可能沒有正確解釋我的問題。 我知道如何將對象傳遞給我的視圖。 但是我正在尋找將我的對象從我的視圖傳遞給控制器​​。所以恰恰相反,它使用的是一個ID,但我想知道如果我可以減少查詢後的數量,我是不是應該傳遞完整的對象。 – Andrew

相關問題