2016-07-16 13 views
0

Laravel 5.2.39では人と場所の間にbelongsstoMany関係を作成しようとしていますが、情報を選択ボックス内のビューに渡すことはできません。私はちょうど得る: "エラー例外:未定義変数:人々"。また、ピボットテーブルのエントリを保存したり作成したりすることもありません。Laravel 5.2はビュー内に属しています

'people'と 'places'テーブルに対応する 'place_id'と 'person_id'カラムを使用して、ピボットテーブルperson_placeを作成しました。

アプリケーション/ Person.php(人モデル)

<?php 
namespace ss; 
use ss\Place; 

use Illuminate\Database\Eloquent\Model; 

class Person extends Model 
{ 
    /** 
    * Fillable fields 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 
     'type', 
     'status', 
     'notes', 
     'email', 
     'phone', 
     'alt', 
     'web', 
     'first', 
     'last', 
     'title', 
    ]; 

    public function places() 
    { 
     return $this->belongsToMany('Place'); 
    } 
} 

アプリケーション/ Place.php(場所モデル)

<?php 
namespace ss; 
use ss\Person; 

use Illuminate\Database\Eloquent\Model; 

class Place extends Model 
{ 
    /** 
    * Fillable fields 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 
     'type', 
     'status', 
     'notes', 
     'email', 
     'phone', 
     'alt', 
     'web', 
     'address1', 
     'address2', 
     'city', 
     'state', 
     'zip', 
     'country', 
    ]; 

    public function people() 
    { 
     return $this->belongsToMany('Person'); 
    } 

} 

アプリケーション/ HTTP /コントローラ/ PlaceController.php(プレイスコントローラ)

<?php namespace ss\Http\Controllers; 
use ss\Place; 
use ss\Person; 
use ss\Http\Requests; 
use Illuminate\Http\Request; 
use View; 
use Session; 

class PlaceController extends Controller 
{ 
    /** 
    * Display a listing of the resource. 
    * 
    * @return Response 
    */ 
    public function index() 
    { 
     $places = Place::all(); 
     $people = Person::pluck('name','id')->all(); 

     return View::make('places.index', compact('places','people')); 
    } 

    /** 
    * Show the form for creating a new resource. 
    * 
    * @return Response 
    */ 
    public function create() 
    { 
     $people = Person::lists('last', 'id'); 

     return view('places.create', compact('people')); 
    } 

    /** 
    * Store a newly created resource in storage. 
    * 
    * @return Response 
    */ 
    public function store(Request $request) 
    { 
     $this->validate($request, [ 
      'name' => 'required' 
     ]); 

     $input = $request->all(); 
     Place::create($input); 

     Session::flash('flash_message', 'Place successfully added!'); 
     return redirect()->action('[email protected]'); 
    } 

    /** 
    * Display the specified resource. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function show($id) 
    { 
     $place = Place::findOrFail($id); 
     return view('places.show')->withPlace($place); 
    } 

    /** 
    * Show the form for editing the specified resource. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function edit($id) 
    { 
     $place = Place::findOrFail($id); 
     $people = Person::pluck('name','id')->all(); 

     return view('places.edit', compact('place','people')); 
    } 

    /** 
    * Update the specified resource in storage. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function update($id, Request $request) 
    { 
     $this->validate($request, [ 
      'name' => 'required' 
     ]); 

     $input = $request->except('people'); 

     $place = Place::findOrFail($id); 
      $peopleIDs = $this->place->people($peopleIds); 

     $place->fill($input)->save(); 
     Session::flash('flash_message', 'Place successfully edited!'); 
     return redirect()->action('[email protected]', $place); 
    } 

    /** 
    * Remove the specified resource from storage. 
    * 
    * @param int $id 
    * @return Response 
    */ 
    public function destroy($id) 
    { 
     $place = Place::findOrFail($id); 
     $place->delete(); 

     Session::flash('flash_message', 'Place successfully deleted!'); 
     return redirect()->action('[email protected]'); 
    } 

} 

リソース/ビュー/場所/ edit.blade.index.php(私は選択リストを構築しようとしている場所ビューは、作業-not)

@section('aside') 
     {!! Form::select('people', $people, null, ['class' => '', 'multiple']) !!} 

<ul class="section table-of-contents"> 
    <li><a href="#introduction">New Time</a></li> 
    <li><a href="#structure">New Money</a></li> 
    <li> </li> 
    <li><a href="#initialization">New Sub-Task</a></li> 
</ul> 
@endsection 

リソース/ビュー/場所/作成.blade.index.php「添付」「持つ」との様々な方法を試してみましたが、取得することができませんがあります

@section('aside') 
      {!! Form::select('people', $people, null, ['class' => '', 'multiple']) !!} 
@endsection 

(場所は、保存するとき、ピボットテーブルを作成しませんが、作品の選択リストを見ます)結果。興味深いことに、私は特に「$人= 『foo』を置いた場合でも、私の編集方法では、それはまだそれが定義されていないと言う

はあなたの助けをありがとう

EDIT:更新されたコード

+0

私は賭けていた場合、私はPHPのは、 'コンパクト()' ')(Laravelの'ビューとうまく再生されていないと言うでしょう。 'array( 'people' => $ people)'のような標準配列を渡そうとしましたか? – lesssugar

+0

ありがとうございます。私はかなり新しく、コンパクト($、$)を使用するときと使用するときの違いを理解していません。上記のコードを手直しで更新し、動作させました。しかし、おそらくこれは私が新しいものを救うことができない理由と関連しています。 '$ place-> people() - > sync($ input);は私が得ることのできる最も近いものですが、正しく動作しません(データベース全体を入れて偽のレコードを作ります)。 –

答えて

0

Inを。 PlacesControllerは、あなたのedit($id)方法は、ビューに人々の配列を渡すことはありません。

/** 
* Show the form for editing the specified resource. 
* 
* @param int $id 
* @return Response 
*/ 
public function edit($id) 
{ 
    $place = Place::findOrFail($id); 
    $people = People::pluck('name','id')->all(); 
    return view('places.edit', compact('place', 'people'); 
} 
+0

Canエディタはなんらかの理由で盗聴されているので自分の投稿を編集しません。書き込みすると自動的に削除されます。とにかく、ユーザーが選択ボックスに人を追加したり削除したりするときにピボットテーブルのIDを更新するために、 'Place :: people() - > sync($ peopleIds);'を使う更新メソッドを追加したかった。 'attach()'と 'detach()'は通常ピボットテーブルにIDを手動で追加したり削除したりするために使われます。 – Ruffles

+0

私はそのコードを少し使って機能しました(元の質問を更新しました)。しかし、私はあなたの編集からの情報を働かせることはできません。次に、Place :: people() - > sync($ peopleIds)を追加します。私は '非静的メソッドを取得するss \ Place :: people()は静的に呼び出されるべきではありません。これは$ thisIdsの変数がないことを知っていますが、クラスは確かにそこにあり、名前空間があります。 –

+0

$ peopleIdsは '$ peopleIds = $ request-> get( 'people');のような入力人から来て、people()メソッドは通常、(人と呼んでいると仮定して)関係メソッドの名前です。 Place :: with( 'people') - > people() - > sync($ peopleIds)のいずれかを試してみるか、ファサードを使用せず、コンストラクタ依存性注入を使用し、 '$ this-> place-> people ($ peopleIds); '私は自分のコントローラーでファサードを使用しません。 – Ruffles

関連する問題