php - Laravel:如何从查询结果中获取模型?

标签 php laravel eloquent

假设我有一个查询,除其他外,它返回用户 ID,这个查询是使用 DB::table()... 而不是使用模型构建的,因此,结果,我得到了一个集合,其中包含每个检索到的行的数组,如下所示:

user_id | calculated_data
--------+----------------
      1 |     123
      2 |     111
      3 |     222
    ... |     ...

假设我将此集合存储在 $data 变量中,当然如果我执行 foreach ($data as $d) { $d->user_id ... } } 将起作用。

但我希望这个查询返回更像 ORM 所做的事情,所以 user_ids 返回用户模型,这样我就可以做,例如,$data->user ->名称

这能做到吗?如果是,怎么办?

最佳答案

您可以使用 hydrate() 函数,它接受 stdClass 对象的 array(或者甚至关联数组 AFAIR)作为输入,返回一个 collectionEloquent Models,所以你可以这样做:

$result = DB::table('users')->take(10)->get();
$users = App\User::hydrate($result->all()); 

您甚至可以使用 fromQuery() 函数直接从 RAW 查询中获取 Eloquent 模型 的集合,即:

$users = App\User::fromQuery('SELECT * FROM users WHERE id > ?', [2])

更新:如果您的集合中没有所有字段来hydrate 模型,您可以使用一个查询 预加载您需要的所有用户并修改您的集合,即:

$users = App\User::find($data->pluck('user_id'));
$data->transform(function($item) use($users) {
            $item->user = $users->where('id', $item->user_id)->first()
            return $item;
        }); 

关于php - Laravel:如何从查询结果中获取模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581708/

相关文章:

php - 保持 tmp 上传文件

eloquent - Laravel eloquent 使用 with() 方法连接多个表并搜索数据

php - Laravel Eloquent 使用相同的外键获取多个记录

php - 在 WordPress 管理员中注册页面时如何避免 menu_position 冲突?

php - 如何制作带有联系时间限制的联系页面

laravel - Composer 要求 laravel/passport 在 laravel 5.8 中不起作用

php - 使用 Eloquent 查找或创建

php - if语句mysql值和form值错误

php - 哪个版本的 Laravel 使用 LTS 或最新版本 - 至少 5 年的开发人员支持 promise ?

php - 使用PHP更新MySQL数据库并返回值