php - laravel5.2 take的疑问

查看:101
本文介绍了php - laravel5.2 take的疑问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

$room=\App\Model\Room::with(['items'=>function($query){
                $query->take(12);  
            }])->get();

上面这段代码每一个room下面的items都是空的,当注释掉$query->take(12);的时候,items又有了,为什么?

解决方案

嗯...理由其實很簡單,你可以加個 dd() 來看下其生成的 SQL

$room = \App\Model\Room::with(['items' => function($query){
    dd($query->take(12)->toSql());  
}])->get();

會產生如下 SQL ( ? 數量代表你的 Room 有幾個):

select * from `machines` where `machines`.`series_id` in (?, ?, ?) limit 12

可以看見其實你加入 takelimit 之類的限制,並不是對 每一筆 作限制,而是全部取得的關聯數據作限制,所以當你設置很小的數量時,會造成一部分的 Room 沒有 Item ,你可以把這個數字設的很大,例如 100000 ,你就會發現 items 有數據了,因為你的限制大於數據量。

至於要如何讓限制每筆的關聯數據,找了一些資料都沒有簡單點的實現方式,目前看起來最靠譜的是這個:

Tweaking Eloquent relations – how to get N related models per parent ?

这篇关于php - laravel5.2 take的疑问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆