2017-10-17 5 views
1

私は2つのテーブルschoolsgradesを持っています。私はすでにモデルの多対多の関係をうまくセットアップしています。IDに基づいてセレクトボックスを設定する -

データベースに選択ボックスの値を挿入することはできますが、取得には困難があります。

例えば、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> 
+0

戻り値のビューに2つのid列があると思います。あなたの関係はどう定義されていますか? – wast

+0

多対多の関係。私はそれぞれのモデルでそれらを設定しました –

+0

私たちに実装を教えてもらえますか?どの行に正確にそのエラーが表示されますか? – wast

答えて

0

私はそれはだから、それはおそらくだと思いますあなたが摘発したいものが何であるかわからない。

$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 
+0

私のblade.phpの非オブジェクトのプロパティを取得しようとしています。それが表示されるエラーです。それは配列のためですか? –

+0

上記のやり方を試してください...またはあなたのビューコードを追加できますか? –

+0

私の見解を見てください。私はあなたの更新を試みましたが、私はまだ同じエラーが発生しました '私のblade.phpの非オブジェクトのプロパティを取得しようとしています ' –

0

$school配列でありますあなたの場合、あなたの意見はおそらく何をするべきかを決めることができません$school->id ...
ビューで学校モデルを使用する可能性が高いと思われるので、compact('grade')のみを表示してから、foreach($grade->schools as $school)を使用してください。
また、$schoolsはIDの配列なので、はforeachが設定されているため、選択したオプションの条件が間違っているようです($schoolsはIDの配列なので、)。しかし、まず他のものを修正する必要があります。

+0

私はあなたの声明を理解していません。 –

+0

ご存知でない部分はありますか? – Inuyaki

+0

同じforeachループを使用する他の選択ボックスがあり、データを取得するときに問題なく動作するため、ステートメントのすべての部分を理解しようとしています –

関連する問題