使用Eloquent检索数据显示不同的数组

时间:2015-06-21 12:15:32

标签: sql eloquent laravel-5

嗯,我对Laravel非常新。所以我实际上正在学习Laracast的基础知识。我有一个叫做歌曲的表,一个模型Song.php如下:

<?php namespace App;
use Illuminate\Database\Eloquent\Model as Eloquent;

class Song extends Eloquent{

}

和控制器SongsController.php

use App\Song;
use DB;

class SongsController extends Controller
{
    function index() {
        $songs      = Song::get(); 
        $songs2     = DB::table('songs')->get();dd($songs2);
        //$mysong2    = Song::whereSlug('as-long-as-you-love-me')->first(); 
    }
}

所以我希望$songs$songs2相同并产生相同的结果。但是dd($songs)会产生如下结果:

Collection {#146 ▼
  #items: array:1 [▼
    0 => Song {#147 ▼
      #connection: null
      #table: null
      #primaryKey: "id"
      #perPage: 15
      +incrementing: true
      +timestamps: true
      #attributes: array:6 [▼
        "id" => "1"
        "title" => "As Long as you Love me"
        "slug" => "as-long-as-you-love-me"
        "lyrics" => null
        "created_at" => "2015-06-21 00:00:00"
        "updated_at" => "2015-06-21 00:00:00"
      ]
      #original: array:6 [▶]
      #relations: []
      #hidden: []
      #visible: []
      #appends: []
      #fillable: []
      #guarded: array:1 [▶]
      #dates: []
      #dateFormat: null
      #casts: []
      #touches: []
      #observables: []
      #with: []
      #morphClass: null
      +exists: true
    }
  ]
}

$songs2产生(我认为是实际的,但不确定):

array:1 [▼
  0 => {#145 ▼
    +"id": "1"
    +"title": "As Long as you Love me"
    +"slug": "as-long-as-you-love-me"
    +"lyrics": null
    +"created_at": "2015-06-21 00:00:00"
    +"updated_at": "2015-06-21 00:00:00"
  }
]

所以我想知道我应该使用哪一个?我有什么错误吗?

1 个答案:

答案 0 :(得分:0)

没有错误。
对于您正在使用功能 get()的美妙歌曲,它将始终返回类型为11a的对象 Illuminate \ Database \ Eloquent \ Collection
但对于$ songs2,你使用查询构建器,函数 get(),它将始终返回一个数组 stdClass 对象。 这就是为什么你会看到不同的结果 两者都是正确的,你可以使用它们,但如果你已经为你的歌曲创建了一个模型,那么使用eloquent而不是查询构建器。