为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel Eloquent ORM 返回 stdClass 而不是 Model 实例

Laravel Eloquent ORM 返回 stdClass 而不是 Model 实例

PHP
慕慕森 2022-01-14 16:04:22
get()当我用 eloquent 查询数据时,它在使用该函数时返回 stdClass 对象而不是我的模型实例。$userFind = User::find(1)$userGet  = DB::table('users')            ->where('users.id','=', 1)            ->select('users.*')->get()[0]echo get_class($userFind) // -> App\Userecho get_class($userGet) // -> stdClassLaravel Eloquent ORM returnig stdClass 而不是实际的 Model报告了同样的问题,但这是一个老话题,解决方案只是回到 Laravel 的先前版本。
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

这是因为您使用\DB::table('users')的是独立于您的模型和代码结构的。这就像直接在数据库上运行查询一样,laravel 无法知道结果是User包含所有字段的完整结果。


利用


$userGet = \App\User::query()

    ->where('id','=', 1)

    ->get()[0]

echo get_class($userGet) // -> App\User


查看完整回答
反对 回复 2022-01-14
?
撒科打诨

TA贡献1934条经验 获得超2个赞

这不是因为使用get()方法。这是因为使用了DB门面。


如果您使用模型外观进行查询,则每个对象都将转换为特定的模型对象。


该get()函数将返回一个Eloquent Collection而不是一个对象。


// 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();


查看完整回答
反对 回复 2022-01-14
  • 2 回答
  • 0 关注
  • 199 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信