2013-08-20 23 views
7

我想更新我用下面的代碼模型:手柄複選框中輸入::在Laravel所有()4

$feature = Feature::find($id)->update(Input::all()); 

這適用於所有領域,除了「完成」 - 場這是一個布爾值在表格並由編輯表單中的複選框表示。

{{ Form::label('done', 'Done?')}} 
{{ Form::checkbox('done',1)}} 

我該如何處理與更新和輸入複選框:)所有(?

謝謝。

+0

我建議你避免使用'Input :: all()'。這樣,您可以允許任何人使用最少的HTML知識更新模型上不應該可編輯的字段。即使你在你的模型中定義了'$ accessible',它也是有風險的。 – vFragosop

+0

謝謝你的建議。我將只爲那些用戶可以編輯的模型使用'Input:all()'。不應該由用戶編輯的屬性將被警告。 – Strernd

+2

使用Input :: all()時,在模型中使用$ fillable數組是個好主意。從文檔中可以看出:「可填充屬性指定哪些屬性應該可以進行批量賦值,可以在類或實例級別設置,可填充的反義詞是守護的,可用作」黑名單「而不是白名單「。 –

回答

24

我發現了一個辦法解決這個

{{ Form::hidden('done', 0); }} 
{{ Form::checkbox('done', 1); }} 
+0

這是要做的! –

+1

如果您勾選'完成'且驗證失敗,是不是它們都會自動填充1?然後下一個提交它沒有問題,如果他們沒有選中它,它仍然會遇到檢查。解決方法是手動添加隱藏輸入的HTML以避免驗證後填充。 – Justin

+3

注意,如果您在編輯記錄時使用Form :: model,則會導致問題(至少在Laravel 5中),因爲如果'done'先前設置爲1,則模型會自動將隱藏值更改爲1。你可以使用''它可以避免任何Form ::模型覆蓋值的問題。 – alexleonard

1

保存之前我做一個快速檢查。

if(!Input::get('someCheckbox')) $feature->someCheckbox = 0; 
1

我知道這是舊的,但我發現填寫表單數據時,這種方式效果最好

$myModel->fill(array_merge(['checkBoxName1'=>'0','checkBoxName2'=>'0'], $request->all())); 

或在OP的情況下,它會是這樣:

$feature = Feature::find($id)->update(array_merge(['checkBoxName1'=>'0','checkBoxName2'=>'0'],Input::all())); 

我只是喜歡它比添加隱藏字段更多的方式。