2017-03-21 18 views
0

を返す:Laravel:私は次の表を持っている複数の関係

enter image description here

をテーブルがuser_eggsと呼ばれ、それがユーザーの卵を格納しています。 卵は、追加のデータ(hatch_time

あなたが見ることができるようにとの項目であるユーザ2の項目46である2個の卵、及びそのような名前、画像として47

マイitemsテーブルに項目一般的な情報を有し、説明など...

私のitems卵のテーブルの項目データを含む$user->eggs()を使用してユーザの卵を返す方法item_id

私が試した:

ユーザーモデル:

/** 
    * Get the eggs 
    */ 
    public function eggs() 
    { 
     return $this->belongsToMany(Egg::Class, 'user_eggs','user_id','item_id') 
     ->withPivot('id','hatch_time'); 
    } 

が、$user->eggs()を空の配列を返します。

アイデア?

+0

レコードをループするとき、またはクエリを実行したいときは、hatch_timeを使用しますか? –

答えて

0

単純なアプローチは次のようになります。あなたのUserEggモデルで は定義:

/** 
    * Get the user associated with egg. 
    */ 
    public function _user() 
    { 
     return $this->belongsTo('App\User','user_id'); 
    } 
    /** 
    * Get the item associated with egg. 
    */ 
    public function item() 
    { 
     return $this->belongsTo('App\Item','item_id'); 
    } 

を、あなたのコントローラで:

は、このようなすべてのものを抽出するためのモデルを使用します。

$userEggs = UserEgg::where('user_id',2)->get(); 
foreach($userEggs as $userEgg){ 
    $associateduser = $userEgg->_user; 
    $associatedItem = $userEgg->item; 
} 
0

短答

場合、ユーザーの卵をループ:

foreach($user->eggs as $egg){ 
    $item = Item::find($egg->pivot->item_id); 
} 

照会する場合:

$user->eggs()->wherePivot('item_id', 1)->get(); 

長い答えに

From the Laravel Documentation

取得中間テーブルの列を

すでに学習しているように、多対多の関係で作業するには、中間テーブルが必要です。 Eloquentは、この表と対話するための非常に有用な方法を提供します。たとえば、Userオブジェクトに関連する多くのRoleオブジェクトがあるとします。この関係にアクセスした後、私たちはモデルにピボット属性を使用して中間テーブルにアクセスすることがあります。私たちは取得した各ロールモデルは自動的にピボット属性が割り当てられている

$user = App\User::find(1); 

foreach ($user->roles as $role) { 
    echo $role->pivot->created_at; 
} 

注意してください。この属性には、中間テーブルを表すモデルが含まれており、他のEloquentモデルと同様に使用できます。

デフォルトでは、モデルキーのみがピボットオブジェクトに表示されます。あなたのピボットテーブルは、余分な属性が含まれている場合の関係を定義するとき、あなたはそれらを指定する必要があります。

return $this->belongsToMany('App\Role')->withPivot('column1', 'column2'); 

を使用すると、自動的に維持のcreated_atとupdated_atのタイムスタンプを持っているあなたのピボットテーブルをしたい場合は、関係定義にwithTimestampsメソッドを使用します。

return $this->belongsToMany('App\Role')->withTimestamps(); 

フィルタリングの関係を介して中間テーブルの列

あなたはまた、WHEを使用してbelongsToManyによって返される結果をフィルタリングすることができます関係を定義するときにrePivotメソッドとwherePivotInメソッドを使用します。

return $this->belongsToMany('App\Role')->wherePivot('approved', 1); 

return $this->belongsToMany('App\Role')->wherePivotIn('priority', [1, 2]); 
+0

私はユーザー - >卵reutrn空の配列を言ったように、私はforeachすることはできませんが、何かがわからない問題がある – TheUnreal

+0

あなたは正しいユーザーを使用していますか?そして、 '$ user-> eggs()'の結果をダンプ( 'dd()')したらどうなるでしょうか? Builderのインスタンスを取得した場合は、カッコなしで '$ user-> eggs'を使用してください。 –

関連する問題