如何在Laravel中制作简单的动态下拉列表?

时间:2019-04-06 15:06:26

标签: php database laravel laravel-5 foreign-keys

我是Laravel的新手,语法不好。我看过许多教程并阅读了许多答案,但是,我的主意还是不明白如何为外键提供一个下拉字段。

我有一个表“ Section”和另一个“ Class”。我想在部分页面中显示类的名称。

部分迁移

Schema::create('sections', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
    $table->integer('class_id')->unsigned();
    $table->foreign('class_id')->references('id')->on('classses');
});

分类迁移

Schema::create('classses', function (Blueprint $table) {
    $table->increments('id');
    $table->string('title');
    $table->timestamps();
});

老实说,我不知道我是否应该更换控制器。

刀片/视图

<div class="form-group">
    <label for="name">Name</label>
    <input type="text" class="form-control" name="name" id="title">
</div>
<div class="form-group">
    <label for="cid">Class</label>
    ???????????????
</div>

索引功能

public function index()
    {        $sections = Section::all();
            return view('sections.index', compact('sections'));

        $classs = Classs::all()->pluck(['id', 'title']);
        return view('sections.index')->with('classs', $classs); }

错误是在$ class行和期望的字符串处无法访问的语句,数组位于([id,'title])

2 个答案:

答案 0 :(得分:1)

在您的控制器中,您具有返回视图的功能。

将其更改为包含->with(),以便您可以在视图中访问这些类:

// if the controller is not for the classes, add this up top:
use App\Classs; // include model name



$classs = Classs:all();

return view('yourView')->with('classe', $classs);

然后,在您看来,您可以执行以下操作:

<div class="form-group">
  <label for="cid">Class</label>

  <select class="" name="cid">
    <option value="null">Class</option>
    @foreach($classs as $class)
      <option value="{{$class->id}}">{{$class->title}}</option>
    @endforeach
  </select>

</div>

它将遍历数据库中的所有类,并为它们创建一个<option>元素。在第一次迁移时,您正在使用另一个表中的id,因此需要将其设置为值。


将索引函数更改为此:

public function index()
{
    $sections = Section::all();
    $classs = Class::all();

    return view('sections.index')->with('sections', $sections)->with('classs', $classs);
}

  

您能告诉我在哪里可以编写条件,例如role_id = 2等的类中的select *。

基本上,在MVC框架中,您在控制器中进行所有查询,并将数据传递到视图中,在其中显示数据。

Laravel有一个DB class,可用于基本查询:

select * from class where role_id = 2

使用DB类将在Laravel中变成这个样子。

DB::table('class')->where('role_id', 2)->get();

// or if it's a model:
Model::where('role_id', 2)->get();

答案 1 :(得分:0)

我现在已经在刀片页面中使用了此代码

        "subnets": [
          {
            "name": "[variables('subnet1Name')]",
            "properties": {
              "addressPrefix": "10.0.0.0/24"
            }
          },
          {
            "name": "[variables('subnet2Name')]",
            "properties": {
              "addressPrefix": "10.0.1.0/24"
            }
          }
        ]