【问题标题】:Generate drop-down list input with values from DB table使用数据库表中的值生成下拉列表输入
【发布时间】:2013-01-08 18:14:51
【问题描述】:

我正在尝试使用 Laravel 生成一个包含来自 MySQL 表的值的下拉列表。该表很简单,两列 - idcategory

以下将检索所有记录(类别)但返回一个对象而不是数组,这是我需要的下拉代码 -

$categories = Category::all();

下拉的代码是:

{{ Form::select('category', $categories, $post->category_id) }}

想法?

更新

bgallagh3r 建议使用 foreach 循环将每个类别转换为数组。他们的代码让我很接近,但生成了一堆时髦的嵌套optgrouptags。我能把它降到只有一个 optgroup 但那太多了..

$categories = Category::all();
foreach ($categories as $cat)
{
    $category = $cat->to_array();
    $id = $category['id'];
    $value = $category['category'];
    $cats[] = array($id => $value);
}

然后,格式为:

{{ Form::select('categories', $categories)}}

我最终得到了这个 HTML:

    <select name="categories">
    <optgroup label="0">
    <option value="1">Department News</option>
    </optgroup>
    <optgroup label="1">
    <option value="2">General</option>
    </optgroup>
   ...
    </select>

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你可以试试'lists'功能:

    $categories = Category::lists('category', 'id');

    (仅适用于 Laravel 3) 或者甚至省略 'id' 参数,因为它将默认为 Model 键,请参阅http://laravel.com/api/source-class-Laravel.Database.Query.html#596

    $categories = Category::lists('category');

    (对于 Laravel 4,您确实需要第二个参数,请参阅 http://laravel.com/api/source-class-Illuminate.Database.Query.Builder.html#1034-1063

    【讨论】:

    • 我不知道 list 方法,直到我偶然发现了这个,但是我想澄清我发现的一些东西。省略第二个参数不会使列表方法默认为模型的键。在 3.2.12 和 4 的最新版本中并非如此。如果要正确填充下拉列表,您将始终希望传递密钥(选项的值成为键)。
    • 这真的很棒。感谢您的回答。
    • 您可能希望将您的列表排序到... Category::orderBy('category')-&gt;lists('category', 'id');
    • 谢谢你的解决方案,我在网上到处寻找这个。
    • 现在,使用 Laravel 5,不要忘记在 -&gt;lists() 之后添加 -&gt;all()
    【解决方案2】:

    根据您是否在模型中使用 Eloquent,Category 将返回一个对象数组,您需要先将对象转换为数组,然后再将它们传递给 Form 类。

    foreach (Category::all() as $cat)
    {
        $categories[] = array($cat->id => $cat->category);
    }
    {{ Form::select('categories', $categories)}}
    

    【讨论】:

    • 是的,这就是问题所在......试图找出如何做到这一点。
    • 你试过了吗?简而言之,它不起作用.. 最终得到一堆 optgroup 字段等。我能够单独使用这些行来关闭.. 将在一分钟内编辑问题
    • 也许使用 ->to_array() 还不够,尝试像我现在所做的更改那样实际设置数组。
    • 不..问题是我们发送给表单的数组在它不能被索引时被索引......所以它为每个索引键制作了 optgroups。它必须是这样的:Form::select('size', array('L' =&gt; 'Large', 'S' =&gt; 'Small'), 'S');
    • 改用$categories[$cat-&gt;id] = $cat-&gt;category;。并且不要使用Category::all() 而使用Category::get(array('name', 'id')),只获取所需的列。 (或者只是使用我的答案;))
    【解决方案3】:

    在 Laravel 4 中,你可以像下面这样轻松尝试

    //Query category and pass it  to the view that you want to show your category
    $category = Category::lists('category_name', 'category_id');
    

    在您看来,只需添加{{ Form::select('category', $category) }}。结果将是您想要的,如下所示

    <select name="category">
            <option value="category_id">category_name</option>
    </select>
    

    【讨论】:

      【解决方案4】:

      这个怎么样?

      foreach (Category::all() as $cat)
      {
          $categories[$cat->id] = $cat->category;
      }
      {{ Form::select('categories', $categories)}}
      

      【讨论】:

        【解决方案5】:

        只需将 bgallagh3r 的代码稍微修改一下,以下内容即可:

        foreach (Category::all() as $cat)
        {
            $categories[$cat->id] = $cat->category);
        }
        {{ Form::select('categories', $categories)}}
        

        ...虽然我更喜欢(在 L4 中):

        foreach (Category::select('id', 'category')->orderBy('id','asc')->get() as $cat)
        {
          $categories[$cat->id] = $cat->category;
        }
        {{ Form::select('categories', $categories)}}
        

        【讨论】:

          【解决方案6】:

          对于 Laravel 5.3.x

          在控制器中

          $categories = Category::pluck('name', 'id');
          

          在视图中

          {{ Form::select('categories', $categories)}}
          

          【讨论】:

            【解决方案7】:

            对于 laravel 5.2

            在控制器中

            $mechanics = User::where('role_id','3')->lists('name', 'id');
            

            在视图中

            {{   Form::select('mechanic_id', 
                [''=>'please select'] + $mechanics->toArray(), $order->mechanic_id , 
                 array('id' =>'material-select2','class' => 'form-control'))  }}
            

            【讨论】:

              猜你喜欢
              • 2019-05-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-10
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多