2017-05-13 2 views
5

私は彼らがそうお互いに多くの関係に1 Townsが多くStreetsStreetsを持つことができる持っている住宅 ルーメン:どのようにEloquentを使用してサブテーブルのリストを取得するには?

が複数持つことができ、次のデータベーステーブル

  • を持っていますそれにはHousesがあります。

    私はTownのIDを持っています。私はその都市のすべてのHousesのリストを取得したいだけです。だから私はやっている。

    //This gives me streets and houses in nested arrays 
    $towns = Town::with(['streets', 'streets.houses' => function($query) { 
        $query->where('active', 1) 
    }])->find($town_id); 
    
    //But I only want a list of houses so I do 
    $houses = $towns->streets->map(function($street) { 
        return $street->houses; 
    }); 
    

    これは機能しますが、これを行うにはより良い方法がありますか?私はちょうど雄弁を使用して家のリストを得ることができるはずであるように私は感じる。後でマッピングをしなければならないのは正しいと思われます。

答えて

1

この場合、レイジーローディングが効率的でないことは間違いありません。

あなたは家のリストが必要です。私はちょうどジョイントで適切なクエリを構築します。必要に応じて

House::query() 
->join('street', 'house.id', 'street.id') 
->join('town', 'street.town_id', '=', 'town.id') 
->where('town.id', $town_id) 
->get(); 

微調整:ここ

は一例です。

時には、雄弁に比べてクエリビルダーを使用する方が理にかなっています。

関連する問題