假设我有一个查询,除其他外,它返回用户 ID,这个查询是使用 DB::table()...
而不是使用模型构建的,因此,结果,我得到了一个集合,其中包含每个检索到的行的数组,如下所示:
user_id | calculated_data
--------+----------------
1 | 123
2 | 111
3 | 222
... | ...
假设我将此集合存储在 $data
变量中,当然如果我执行 foreach ($data as $d) { $d->user_id ... } }
将起作用。
但我希望这个查询返回更像 ORM 所做的事情,所以 user_id
s 返回用户模型,这样我就可以做,例如,$data->user ->名称
这能做到吗?如果是,怎么办?
最佳答案
您可以使用 hydrate()
函数,它接受 stdClass
对象的 array
(或者甚至关联数组 AFAIR)作为输入,返回一个 collection
的 Eloquent 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/