2016-11-22 10 views
3

私は典型的なhasManyの方法があります。Eloquent - hasMany関係に結合を追加する方法は?

public function earmarks() { 
    return $this->hasMany('App\Earmark'); 
} 

をしかし、私はそれらを取得するために->with('earmarks')を使用するときにどのように私はこの関係に参加追加し、他のいくつかの条件のですか?あなたは場所のモデルでhasManyのメソッドを定義し

->join('locations', 'locations.id', '=', 'earmarks.location') 
->select('earmarks.*', 'locations.location AS em_location') 
->orderBy('date', 'asc'); 
+0

はないだろう'earmarks'に' location'という 'hasOne()'関係を作成する方が簡単ですか? '$ E-> hasOne( 'location') - > orderBy( '​​date'、 'ASC');' – jcorry

+0

これは 'Laptop :: with( 'earmarks')' earmarkの位置関係を引き寄せるために? – daninthemix

+0

ああ申し訳ありませんが、場所と耳鳴りの間にhasMany/belongsTo関係があるようです。しかし、同じことが当てはまります。耳鳴りと場所の間の関係を設定するだけで、関連する要素のやり方にアクセスできます。 – jcorry

答えて

2

OKを、私はこのように、私のwith()句で閉鎖を必要と考え出し:

$updated_laptops = Laptop::with([ 
     'earmarks' => function($q) { 
      $q 
      ->join('locations', 'locations.id', '=', 'earmarks.location') 
      ->select('earmarks.*', 'locations.location AS em_location') 
      ->orderBy('date', 'asc'); 
     } 
    ])->addJoins()->selectListCols()->find($request->IDs)->keyBy('id'); 
1

(例えば\アプリケーション\モデルはLocation.phpを\)

public function earmarks() { 
    return $this->hasMany('App\Earmark'); 
} 

あなたがコントローラでLocationオブジェクトを返すことができます:私は追加したいです(例えばLocationController.php):ビューで次に

public function show($id) 
{ 
    $location = \App\Models\Location::find($id); 
    return view('locations.show) 
    ->with('location', $location); 
} 

(例えば場所は\ show.blade.php)は、あなたがこのようなデータを取得することができます

@foreach ($location->earmarks->sortBy('date') as $earmark) 
    <p>{{ $earmark->attribute_name }}</p> 
@endforeach 
+0

私は実際には、JSONを返すだけで、ビューで作業していない。このコードは私が何をしているのですか?($ id-> idB)私は場所を取得するために耳鳴りが必要な場合を除いて必要があります。だから私はこれがラップトップとの関係を得ていると推測していますが、「ラップトップ::」(「earmarks」) - >(「location.location」)のようなものです。 – daninthemix

関連する問題