如何从原始对象创建一个Eloquent模型实例?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从原始对象创建一个Eloquent模型实例?相关的知识,希望对你有一定的参考价值。
我需要使用Laravel进行原始数据库查询:
$results = DB::select("SELECT * FROM members
INNER JOIN (several other tables)
WHERE (horribly complicated thing)
LIMIT 1");
我得到一个普通的php StdClass对象,其中包含成员表中属性的字段。我想将它转换为一个成员(一个Eloquent模型实例),看起来像这样:
use Illuminate\Database\Eloquent\Model;
class Member extends Model {
}
我不知道怎么做,因为会员没有设置任何字段,我担心我不会正确初始化它。实现这一目标的最佳方法是什么?
答案
您可以尝试将结果保湿到Model对象:
$results = DB::select("SELECT * FROM members
INNER JOIN (several other tables)
WHERE (horribly complicated thing)
LIMIT 1");
$models = Member::hydrate( $results->toArray() );
或者您甚至可以让Laravel从原始查询中为您自动保湿:
$models = Member::hydrateRaw( "SELECT * FROM members...");
编辑
来自Laravel 5.4的hydrateRaw已不再适用。我们可以使用fromQuery代替:
$models = Member::fromQuery( "SELECT * FROM members...");
另一答案
您只需初始化一个新模型:
$member = new App\Member;
然后你可以分配列:
$member->column = '';
或者,如果所有列都是可分配的:
$member->fill((array)$results);
或者我误解了什么?
另一答案
你绝对应该使用Eloquent来执行此操作。
您可以声明模型之间的关系,并使用where条件。
喜欢:
Member::where(......)->get();
这将返回一个雄辩的实例,你可以做任何你需要的事情。
以上是关于如何从原始对象创建一个Eloquent模型实例?的主要内容,如果未能解决你的问题,请参考以下文章