使用条件从数据库填充 Laravel 4 中的表单选择字段


Populate a form selection field in Laravel 4 from Database with conditions?

使用Laravel 4和PHP,我能够查询数据库并填充HTML选择框。

魔术发生在User::find(1)->lists('username', 'user_id')

这是我的选择字段代码。

<?php
echo Form::label("username", "Username", array('class' => 'col-lg-12 control-label')); }}
echo Form::select(
    'user',
    User::find(1)->lists('username', 'user_id'),
    Input::get('user'),
    array(
        "placeholder" => "US",
        'class' => 'form-control'
    )
)
?>

我需要修改它以仅使用未设置为0 status的用户填充表单选择。

我认为这可能是一个简单的解决方案,但我还没有找到解决方案>

这也应该有效:

User::where('status', '!=', '0')->lists('username', 'user_id')

但正如 J.T. Grimes 所提到的,你应该把这段代码移到 Users 控制器中的一个方法中,或者更好的是,在一个名为 getActiveUsersList() 的方法中移动你的 User 模型:

public function getActiveUsersList()
{
    return $this->where('status', '!=', '0')->lists('username', 'user_id');
}

不要忘记在控制器 __construct() 方法中键入提示您的用户模型。

protected $user;
public function __construct(User $user)
{
    $this->user = $user;
}

并使用以下方法将其分配给控制器中的变量:

$activeUsersList = $this->user->getActiveUsersList();

然后,您可以使用以下命令将其传递给视图:

return View::make('users', compact('activeUsersList'))

我以前从未见过lists()应用于模型实例 - 我假设只返回一条记录?

我会尝试

// warning: untested code...
...
DB::table('user')->where('status','<>',0)->lists('username','user_id'),
...

我也会把它移到控制器($userList = DB::table('user')...)并将该变量传递给视图。 在视图中进行数据库调用似乎是次优的 MVC。