![](/img/trans.png)
[英]Laravel Eloquent ORM returnig stdClass instead of actual Model
[英]Laravel Eloquent ORM returning stdClass instead of Model instance
當我雄辯地查詢數據時,使用get()
函數時,它將返回stdClass對象而不是我的Model實例。
$userFind = User::find(1)
$userGet = DB::table('users')
->where('users.id','=', 1)
->select('users.*')->get()[0]
echo get_class($userFind) // -> App\User
echo get_class($userGet) // -> stdClass
Laravel雄辯的ORM returnig stdClass而不是實際的Model報告了相同的問題,但這是一個古老的話題,解決方案只是回到Laravel的先前版本。
這是因為您使用了\\DB::table('users')
,它與模型和代碼結構無關。 就像直接在數據庫上運行查詢一樣,laravel無法知道結果是具有所有字段的完整User
。
采用
$userGet = \App\User::query()
->where('id','=', 1)
->get()[0]
echo get_class($userGet) // -> App\User
這不是因為使用get()
方法。 這是因為使用了DB
Facade。
如果使用模型外觀查詢,則每個對象都將投射到特定的模型對象中。
get()
函數將返回一個Eloquent Collection
而不是一個Object。
// this is a collection of users
$users = User::where('id', 1)->get();
因此,如果您想要該集合中的一個對象,則可以在它之后調用first()
。
(而不是調用數組索引[0])。
// this one is ok too.
// but it's not recommended.
$user = User::where('id', 1)->get()[0];
// this is proper way
$user = User::where('id', 1)->get()->first();
而且,如果您確定只有一行符合您的條件,則可以調用first()
而不是get()
。
$user = User::where('id', 1)->first();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.