Laravel 6中两种ORM数据查询方式的执行时机是否存在差异?
Laravel 6中两种ORM关联调用的执行时机区别
在Laravel 6的ORM关联查询中,$user->follows和$user->follows()的执行时机有明显区别,具体如下:
$user->follows(属性调用)
这是延迟加载(懒加载)模式,数据库查询会在首次访问该属性时触发。比如你先获取了$user对象,之后在代码或视图中第一次用到$user->follows时,Laravel才会执行关联查询获取数据,并且会把结果缓存到$user对象中,后续再次访问该属性不会重复发起数据库请求。$user->follows()(方法调用)
调用这个方法会直接返回一个查询构建器实例,不会立即执行数据库查询。你可以在这个实例上继续追加查询条件(例如$user->follows()->where('status', 'active')->limit(10)),只有当你调用get()、first()、count()这类触发查询的方法时,才会真正执行数据库操作。如果仅调用$user->follows()而不执行收尾方法,不会产生任何数据库请求。
若参考的是「向视图传递数据的时间线方法」:
- 使用
$user->follows时,查询会在视图中首次使用该属性的时刻执行; - 使用
$user->follows()->get()时,查询会在控制器中调用get()方法的时刻执行,之后将结果传递给视图。
内容的提问来源于stack exchange,提问作者AHMED KAMAL
相关产品推荐
相关产品推荐

