2017-05-13 33 views
5

Tôi đã các bảng cơ sở dữ liệu sauLumen: làm thế nào để có được danh sách bảng phụ bằng cách sử dụng Eloquent?

  • Towns
  • Streets
  • Nhà

Họ có một đến nhiều mối quan hệ với nhau để Towns có thể có nhiều StreetsStreets có thể có nhiều Houses trên đó.

Tôi có ID là Town và tôi chỉ muốn có danh sách tất cả các Houses trong thị trấn từ đó. Vì vậy, tại thời điểm này tôi đang làm.

//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; 
}); 

Tác phẩm này có cách nào tốt hơn để làm điều này? Tôi cảm thấy như thể tôi chỉ có thể có được danh sách các ngôi nhà chỉ bằng cách hùng biện. Việc phải thực hiện một số ánh xạ sau đó có vẻ không đúng.

Trả lời

1

Bạn nói rằng tải chậm không hiệu quả trong trường hợp này.

Bạn chỉ cần danh sách các ngôi nhà, tôi sẽ chỉ xây dựng truy vấn phù hợp với các khớp.

Dưới đây là một ví dụ:

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

Tweak khi cần thiết.

Đôi khi việc sử dụng trình tạo truy vấn trên tinh thần trở nên có ý nghĩa hơn.

Các vấn đề liên quan