Osk*_*D90 19 php laravel eloquent laravel-5
使用语法创建查询时DB::table('foo'),它会创建一个泛型类(stdClass).有没有办法将结果行强制转换为特定的类?
以下是一些示例代码,可以解释我想要做的事情:
$result = DB::table('foo')->get();
$converted = (Foo) $result; // Not going to work
Run Code Online (Sandbox Code Playgroud)
我想将数组的所有(stdClass)对象强制转换为Foo类.
dKe*_*Ken 31
是的,您可以将结果保存到您想要的类中.我发现答案深深埋藏在一堆半答案和混乱的问题中,组成了可怕的Laracasts.com论坛.谢谢你在这里提问而不是那里.
获得结果后,使用您的模型类对它们进行水合:
$result = DB::table('foo')->get();
$converted = Foo::hydrate($result);
Run Code Online (Sandbox Code Playgroud)
编辑:如果有帮助的话,也可以找到关于该hydrate方法的一些文档
编辑2:我发现自己处于一种情况,我需要根据查询结果从一个array或一个转换collection结果.当一个集合被返回时,它被正确地水合,但是当结果是一个数组时,它们就是stdClass.我写了一个快速方法添加到我的主人model,它采用了一组数组或对象,或一个分页对象,并正确地将其转换为我想要的对象.
Eloquent 模型没有 hydrate() 方法。
这已移至 Eloquent Builder 类。
https://laravel.com/api/5.4/search.html?search=hydrate
这是我在一些 Laravel 5.8 代码中的工作示例:
$instance = new $class;
$table = $instance->getTable();
$eloquent_builder = new \Illuminate\Database\Eloquent\Builder(
// the Query Builder!
DB::connection($connection_name)
->table($table)
->select($columns)
->orderBy($order_by, $order)
);
// Tell Eloquent what you're using to hydrate the query
$eloquent_builder->setModel($instance);
return $eloquent_builder->get();
Run Code Online (Sandbox Code Playgroud)