gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 09:12:40 25 4
gpt4 key购买 nike

假设我有一个查询,除其他外,它返回用户 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com