$room=\App\Model\Room::with(['items'=>function($query){
$query->take(12);
}])->get();
上面这段代码每一个room下面的items都是空的,当注释掉$query->take(12);
的时候,items又有了,为什么?
$room=\App\Model\Room::with(['items'=>function($query){
$query->take(12);
}])->get();
上面这段代码每一个room下面的items都是空的,当注释掉$query->take(12);
的时候,items又有了,为什么?
很显然,没匹配到。
所有的 with 是通过关联模型实现的 abstract public function addEagerConstraints(array $models)
方法。
你会发现原因就是 with
中关联数据表的查询提供的数据与你获取的模型数据不匹配,因而导致查询无结果。
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答536 阅读✓ 已解决
773 阅读
嗯...理由其實很簡單,你可以加個
dd()
來看下其生成的SQL
:會產生如下
SQL
( ? 數量代表你的Room
有幾個):可以看見其實你加入
take
、limit
之類的限制,並不是對每一筆
作限制,而是全部取得的關聯數據作限制,所以當你設置很小的數量時,會造成一部分的Room
沒有Item
,你可以把這個數字設的很大,例如100000
,你就會發現items
有數據了,因為你的限制大於數據量。至於要如何讓限制每筆的關聯數據,找了一些資料都沒有簡單點的實現方式,目前看起來最靠譜的是這個:
Tweaking Eloquent relations – how to get N related models per parent ?