laravel5:将复选框存储为tinyint(4)或mysql / DB中的布尔值

时间:2015-06-01 03:52:10

标签: php laravel

寻找更好的执行以下功能,特别是处理复选框。

    /**
 * 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');     

}

1 个答案:

答案 0 :(得分:1)

我认为你做得很好,但你可以测试status的值为字符串'yes'。未经检查的复选框只是不注册任何东西,所以你将基本上做同样的事情。假设您的复选框输入值为“是”,则:

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

无论如何,你将不得不让'else'为未经检查的案例定义一些值。这只是你想要用于检查值的问题。你甚至可以把它设为1,但是未经检查的情况不会是0,你仍然需要这个条件来分配它。

如果你想要从你的控制器中取出逻辑,你可能已经尝试在DDL中将字段默认设置为0,然后在实现mutator(setter)的模型中设置:

class User extends Eloquent {

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

}

这里的问题是,如果您的输入中没有状态,则不会调用此选项,如果取消选中该复选框,则不会显示此状态。因此,如果用户设置和取消设置,它将不会取消它。

因此,据我所知,作为传统做法,我们都为控制器中的输入生成真值和假值。您真正的选择是您希望在表单中的输入上设置什么值。