2015-06-01 72 views
0

尋找更好的執行下面的函數,具體處理複選框。laravel5:將複選框存儲爲tinyint(4)或布爾值,在mysql/DB中

/** 
* Update the specified resource in storage. 
* 
* @param int $id 
* @return Response 
*/ 
public function update(CreateUserRequest $request, $id) 
{  

    $user = User::find($id); 
    //TODO should be else where? 
    $input = $request->all(); 
    if(isset($input['status'])) $input['status'] = 1; 
     else $input['status'] = 0; 
    $user->fill($input)->save();   
    return redirect('admin/users');  

} 
+2

你能解釋一下你有什麼和你想要什麼嗎? – PhuLuong

+0

// TODO下面3行應該在哪裏?因爲控制器不應該處理這種邏輯,再加上如果我有其他形式的複選框,它們會在選擇時返回「開」,否則返回null。我只想在分貝中看到1或0? –

+0

我的控制器日益增長,必須有一個更好的地方來檢查返回的輸入。如果(isset($ input ['featured']))$ input ['featured'] = 1; \t \t \t else $ input ['featured'] = 0; \t \t $ ingredients_list = $ request-> input('ingredients_list'); \t \t if(!isset($ ingredients_list))$ ingredients_list = [];' –

回答

0

我認爲你做得很好,但你可以測試字符串'yes'的狀態值。未經檢查的複選框只是沒有註冊任何東西,所以你會做基本相同的事情。假設你的複選框,輸入具有價值=「yes」,那麼:

$input = $request->all(); 
if($input['status'] === 'yes') $input['status'] = 1; 
else $input['status'] = 0; 

差不多不管你將必須有「其他」的東西,以定義選中情況下,一些價值。這實際上只是您想要用於檢查值的問題。你甚至可以讓它成爲1,但未選中的情況不會是0,你仍然需要這個條件來分配它。

如果你想要得到的邏輯移出控制器,你可能已經嘗試設置字段默認字段爲0,在您的DDL,然後在模型中實現突變(二傳):

class User extends Eloquent { 

    public function setStatusAttribute($value) 
    { 
     $this->attributes['status'] = 1; 
    } 

} 

這裏的麻煩是,如果您的輸入中沒有狀態,則不會調用此選項,並且如果取消選中該複選框,您將不會擁有它。因此,如果用戶設置和取消設置,它不會取消設置。

因此,就我所知,我們都在控制器中爲輸入生成真值和假值,這是常規做法。你只是真正的選擇是你喜歡在表單中設置輸入的值。