laravel中collection对象

1.众所周知laravel从数据库查询出来的是一个collection集合,里面包含了丰富的对象和方法.

collection对象可以被foreach 可以当成数组来处理.下面介绍一些常用的collection处理数据的方式.

collection链式查询每次返回的都是一个全新的collection实例 collection对象方法非常的多,下面介绍几个常用的.

分块处理数据:

User::with('articles')->chunk(100,function($articles){

foreach($articles as $article){

//code

}

});

分块的目的是为了处理大量数据时 不会一下子取出所有要操作的数据 这样会导致内存报表,分块处理是一种很好的处理方式.

条件查询并返回第一个对象.

User::with('articles)->where('id','>',100)->where('status','>',0)->frist();

你甚至可以查询出对象集合后 倒转整个排序:

User:;with('articles)->reverse()->get();

需要注意的是 collection有些方法并不会返回一个collection实例. 如果链式调用没有返回 该行会直接抛出一个严重级别的错误,脚本中止运行.

已经实例化的collection对象是不能再被排序的,这一点需要注意.

实例化后计算所有User的总关注数.

$users=User::all();

$count_follows=$user->sum->follows;

有时候限于特殊的业务场景,你需要创建一个自定义数据的collection对象, 你可以这么做

$collection =collect([1,2,3,4,5,6]);

collection 如果在视图上使用,一定要记住以下原则:

1.为了避免N+1问题,切记没有预加载的relation绝对不要使用,否则循环一次就是一次select查询.

2.尽量避免重复双向关系调用,例如:

$user= User::findOrFail($id);

$articles=$user->category->user->category->articles;

以上的关联查询方式绝对是愚蠢的,这样多进行了不必要的查询. 所以这样的双向查询最好是不要做,特殊的业务场景最好拆分逻辑.

3.保证查询的健壮性, 因为查询的链式中只要出现错误必定是一个erroe级别的 ,这样极大的影响的应用的使用,查询的健壮性必须保证,这样的时候是不能抛出错误的.

日记本

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

赞赏支持
被以下专题收入,发现更多相似内容