簡體   English   中英

Laravel Eloquent ORM返回stdClass而不是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM