根据ID填充选择框 - PHP

时间:2017-10-17 10:03:30

标签: php mysql laravel

我有两个表,schoolsgrades,它们与很多相关。我已经成功地在模型中建立了多对多的关系。

我可以将选择框值插入数据库,但我很难尝试获取。

例如,当我点击id = 1的成绩时,我正在尝试将相应的学校提取到包含值的选择框中。我收到错误Integrity constraint violation: 1052 Column 'id' in field list is ambiguous

我在查询中做得对不对?

控制器

public function editPage($id)
    {
        $grade = Grade::whereId($id)->firstorFail(); 
        $schools = $grade->schools()->pluck('id')->toArray();
        return view('grades.edit',compact('grade','schools'));

    }

模型

public function schools()
    {
        return $this->belongsToMany('App\School')
        ->withTimestamps();
    }

查看

<div class="form-group">
<label for="select" class="col-lg-2 control-label">School</label>
<div class="col-lg-10">
<select class="form-control" id="school" name="school[]" mulitple>
@foreach($schools as $school)
<option value="{!! $school->id !!}" @if(in_array($school->id, $schools)) selected="selected" @endif >
               {!! $schools->name !!}
</option>
    @endforeach
</select>

</select>
</div>
</div>

2 个答案:

答案 0 :(得分:0)

我认为这可能是因为它不确定你想要采用什么'id'。

尝试

    $schools = $grade->schools()->pluck('schools.id')->toArray();

您也可以通过成绩并在视图中获得学校......

public function editPage($id)
{
    $grade = Grade::whereId($id)->with('schools')->firstorFail();
    return view('grades.edit', compact('grade'));
}

然后

$school_options = $grade->schools->pluck('name', 'id');

@foreach($school_options->all() as $key => $value)
    <option value="{{ $key }}">{{ $value }}</option>
@endforeach

答案 1 :(得分:0)

$school在您的案例中是一个数组,因此您的观点很可能无法决定如何处理$school->id ...
您似乎更有可能只在视图中使用学校模型,因此只需compact('grade'),然后在视图中使用foreach($grade->schools as $school)
此外,您选择的选项的条件似乎是错误的,每个$school(此时只是一个id,因为$schools是一个ID数组)显然在$schools中,因为&#39}你的foreach是如何建立的。但你应该先解决另一件事。