2016-05-02 20 views
3

私はまだLaravelを学んでおり、私は質問を実行するために雄弁を使っています。私のアプリケーションでは、ユーザーは1つのサークルに属することができます。サークルにはリポジトリがあり、リポジトリにはアイテムが含まれています。 1つのサークル内のさまざまなリポジトリに属する​​すべてのアイテムを取得しようとしています。

ユーザーモデル:

public function circle() { 
    return $this->belongsTo('App\Models\Circle'); 
} 

サークルモデル:

public function users() { 
    return $this->hasMany('App\Models\User'); 
} 

public function repositories() { 
    return $this->hasMany('App\Models\Repository'); 
} 

リポジトリモデル:

public function items() { 
    return $this->hasMany('App\Models\Item'); 
} 

public function circle() { 
    return $this->belongsTo('App\Models\Circle'); 
} 

項目モデル:

public function repository() { 
    return $this->belongsTo('App\Models\Repository'); 
} 
ここでは

は、私はすべての項目を反復処理しようとしているマークアップです:ルートの処理を担当

@foreach($items as $item) 
     <span>{{ $item->name }}</span> 
    @endforeach 

私のコントローラはここにある:今、私が所属する2つのリポジトリを取得することができますのよう

function library() { 
    $user = Auth::user(); 
    $circle = $user->circle; 
    $repositories = $circle->repositories; 
    $items = $repositories->items; 
    return View('pages.library', compact(['user', 'circle', 'items'])); 
} 

この2つのリポジトリに属する​​複数のアイテムは取得できません。リポジトリで@foreachを実行して両方を実行し、空の配列内の項目をプッシュしようとしましたが、最後の項目のみで終了します。私は行方不明のクエリテクニック/ステップがありますか?

答えて

3

$repositoriesはモデルではありません。だから保護されているので、$itemsプロパティpromを呼び出すべきではありません。

私はあなたがそのアイテムの関係を探していることを知っている...あなたは$repositoriesと上itterateする必要があり、各$repository $アイテムのようなオーバー:

@foreach($repositories as $repository) 
    @foreach($repository->items as $item) 
     <span>{{ $item->name }}</span> 
    @endforeach 
@endforeach 

とコントローラからこれを削除します。

$items = $repositories->items;

+0

ありがとうございました。私はこれをもっとはっきりと理解しようとしています。したがって、コントローラのインスタンス化されたオブジェクトは、そのメソッドに属しているメソッドにアクセスできます。このメソッドを使用すると、関連するモデルの新しいインスタンスを作成できます。しかし、hasManyに対して同じ処理を行うと、コレクションを取得しています。コレクションからコレクションを取得することを避けるように私にお勧めしますか?それは悪い習慣であり、このような状況を避けなければならないのですか? –

+0

'items'テーブルに 'circle_id'という外部キーを入れることをお勧めしますか?だから私は、リポジトリのインスタンスを作成し、それをアイテムインスタンスにさらに煮沸するのではなく、問題のサークルモデルに関連付けられているすべてのアイテムをつかむことができますか、それとも悪い習慣ですか? –

関連する問題