laravel 5.4 数据库中的表单下拉列表

Posted

技术标签:

【中文标题】laravel 5.4 数据库中的表单下拉列表【英文标题】:laravel 5.4 form dropdown from database 【发布时间】:2017-10-23 18:08:10 【问题描述】:

我想从数据库中获取下拉选项值和名称,为此我的控制器代码是

 $roles = Role::pluck('role','user_id');
 return view('users.add_role',compact('roles'));

要从下拉列表中获取此数据,我的视图文件代码是

<select name="role" class="form-control" >
          @foreach($roles as $role)
            <option value=" $role->user_id  ">  $role->role  </option>
          @endforeach
</select>

但它说错误

Trying to get property of non-object (View: C:\xampp\htdocs\auth2\resources\views\users\add_role.blade.php)

如果我只使用

<select name="role" class="form-control" >
      @foreach($roles as $role)
        <option value=" $role  ">  $role  </option>
      @endforeach
</select>

然后它显示表的角色列,但它不将选项值传递给数据库。那么从数据库生成选项值和名称的正确方法是什么?

【问题讨论】:

dd($roles) 并显示输出 刚刚检查,它只传递角色列数据,而不是user_id列 Pluck 仅返回 1 列。如果传入 2 个变量,它将更改数组键的名称。 (laravel.com/docs/5.4/collections#method-pluck) @Masum 分享您的角色表结构。我怀疑你的角色表上有一个 user_id 列。由于用户角色大多存储在数据透视表中。 是的,你说得对,在这个项目中我没有使用数据透视表,user_id 字段在角色表下 【参考方案1】:

您的 $roles 变量包含一个看起来像

的数组
[0] => 'your_role'
[1] => 'your_role'

其中 0 和 1 索引是 user_id。因此,您的 user_id 被设置为您的 $roles 数组的索引。只需执行dd($roles) 并检查输出。 $key as $role 将起作用。其中 $key 将包含user_id

 @foreach($roles as $key => $role)
      <option value=" $key  ">  $role  </option>
    @endforeach

【讨论】:

不起作用,它只通过角色列,只需通过 return dd($roles); 进行检查 集合 #90 ▼ #items: array:2 [▼ 1 => "Admin" 0 => "Manager" ] 不清楚。请通过此调试结果以良好的格式显示图像或更新您的问题。【参考方案2】:

我使用 laravel 集合包更容易生成下拉列表, 你可以在你的刀片模板上做一些事情,它会为你呈现列表

Form::select('role', $role ))

【讨论】:

以上是关于laravel 5.4 数据库中的表单下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中刷新页面后保留下拉列表中的动态值

在 Laravel Jetstream 注册中添加填充的选择下拉列表

如果单击按钮,下拉列表选项会更改(VueJS 和 Laravel 6)

Laravel 中的动态相关下拉列表

Laravel 4 从数据库中获取下拉表单的信息

如何使用 Laravel 在下拉列表中显示数据库中的选定值?