DB::table('foo') 和new FooModel使用上的区别

使用DB创建的builder对象和Model对象使用get()方法查询出的结果形式一样,都是集合,使用first查询出的结果前者为stdclass对象(因为没有像FooModel一样的对象作为载体),后者为FooModel对象,所以对查询结果使用toArray前者的get()会得到一个由多个stdclass组成的数组,后者的get()会得到一个二维数组,first()则是前者为stdclass,后者为数组。

所以Model的toArray才是真正意义上的toArray,stdclass由于没有继承arrayAble所以使用toArray对其无效。

builder get()结果:

DB::table('foo') 和new FooModel使用上的区别 laravel 第1张

model get()结果:

DB::table('foo') 和new FooModel使用上的区别 laravel 第2张

builder get()->toArray()结果:

DB::table('foo') 和new FooModel使用上的区别 laravel 第3张

model get()->toArray()结果:

DB::table('foo') 和new FooModel使用上的区别 laravel 第4张

至于first()->toArray()看上图就知道是stdclass和array的区别

其实不执行toArray方法collection和Model也能当array使用(二者都继承了Arrayable),但是stdClass就不行了,只能以$foo->...的形式取值。

本文 暂无 评论

Top
Music