为什么这两行代码在获取相同数据时会提供不同的集合?

时间:2017-04-19 21:54:39

标签: laravel-5 eloquent laravel-eloquent

我一直在试用Laravel 5作为Spring启动设置的替代品。

$employees = App\Employee::all();

$employees = DB::table('employees')->get();

我已经读过这两行代码执行完全相同的操作,从我的'员工那里检索所有记录。表。这在某种程度上是正确的,但是第一行虽然更简洁,但却提供了更加冗长和嵌套的集合,代表了相同数量的记录

Employee {#180 ▼
      #connection: null
      #table: null
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:3 [▶]
      #original: array:3 [▶]
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #events: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 [▶]
    }

vs

{#173 ▼
      +"id": 3
      +"username": "deren"
      +"password": "noob"
    }

对于第一个集合,与第二个集合相同的信息包含在原始集合中。两者之间的区别是什么?为什么通过Eloquent的第一个查询包含更多的元数据?我觉得它与它提供的口才(原谅双关语)相矛盾,特别是考虑到我不知道如何在原始内部访问数组。我使用dd()转储包含集合的变量,如果这会产生影响。

1 个答案:

答案 0 :(得分:2)

$employees = App\Employee::all();

这将读取数据库表,将每一行转换为特定模型类的实例,并返回它们所有添加的属性,方法等。

$employees = DB::table('employees')->get();

这将读取数据库表并将每一行转换为标准类。它不了解模型。