2014-11-06 181 views
2

我有一堆Shop s和Item s。每家商店都可以有許多不同的商品。但是,我想獲得所有商店,每個商店只有4件商品。使用雄辯的Laravel極限關係

下給了我所有的商店,他們的所有項目:

$shops = Shop::with('items')->get(); 

下給了我所有的商店,但只有在總4項,而不是每一個。

$shops = Shop::with(array('items' => function($query) { 
    $query->take(4); 
}))->get(); 

如何獲得所有商店,每個商店有4件商品?

+0

只是爲了澄清,你想獲得所有的商店有四個項目? – 2014-11-06 13:14:23

+0

我想獲得所有店鋪,每個店鋪最多4件商品 – Maeh 2014-11-06 13:17:51

+0

您可以查看http://stackoverflow.com/questions/26544839/how-to-limit-records-from-related-table-with-eager加載和評論問題 – 2014-11-06 13:22:38

回答

0

這是由於SQL的限制。 當預先加載的東西laravel產生像

SELECT * FROM xyz WHERE id IN (1, 2...) LIMIT 4; 

所以SQL引擎只返回4列在所有SQL查詢。

我無法在laravel中找到快速解決方法。即使在原始SQL中,這也是一個難以解決的問題。

關於此主題的一些閱讀How to select the first/least/max row per group in sql

0
Shop::with(array('items' => function($query) { 
    $query->limit(4); 
}))->get(); 

取代限制應解決您的問題。