2015-12-06 55 views
0

爲什麼下面的硬編碼的雄辯查詢工作:Laravel雄辯查詢沒有更新的複選框,輸入

Auth::user()->update(['text_only_email' => true ]); 

但是,當數據通過表單輸入複選框來它始終更新即使輸入是真的假?

$data['text_only_email'] = $request->input('text_only_email', false); 
Auth::user()->update($data); 

請參閱從芯片結果和轉儲證明傳入的值是true:

$data['text_only_email'] = $request->input('text_only_email', false); 

dd($data); 

轉儲的結果:

array:1 [▼ 
    "text_only_email" => "true" 
] 

* UPDATE *

我我已經添加了下面的mutator到我的用戶模型中,將其轉換爲布爾值,但它仍然沒有工作。我是否將一個字符串轉換爲布爾型正確?

public function setTextOnlyEmailAttribute($value) 
{ 
    $this->attributes['text_only_email'] = (bool)($value); 
} 

回答

1

test_only_email,你在請求​​得到的值是一個字符串,而不是一個布爾值。將其首先轉換爲布爾值true/false值,然後傳遞給update()

+0

我已經添加了下面的mutator到我的用戶模型來轉換爲布爾值,但它仍然不起作用 - 查看更新後的帖子。 – adam78

+0

現在管理它的工作。 – adam78

0

您的mutator將始終返回true,因爲「true」和「false」在轉換爲布爾值時返回true,這兩個字符串都具有多個零個字符。你應該這樣做:

public function setTextOnlyEmailAttribute($value) 
{ 
    $this->attributes['text_only_email'] = $value == 'true' ? true : 
false; 
}