如何从原始对象创建一个Eloquent模型实例?

时间:2016-11-28 23:08:52

标签: php laravel 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 {
}

我不知道怎么做,因为会员没有设置任何字段,我担心我不会正确初始化它。实现这一目标的最佳方法是什么?

3 个答案:

答案 0 :(得分:11)

您可以尝试将结果保湿到模型对象:

$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..."); 

答案 1 :(得分:-2)

您只需初始化一个新模型:

$member = new App\Member;

然后你可以分配列:

$member->column = '';

或者,如果所有列都是可批量分配的:

$member->fill((array)$results);

或者我误解了什么?

答案 2 :(得分:-3)

您应该绝对使用Eloquent来执行此操作。

您可以声明模型之间的关系,并使用where条件。

像:

Member::where(......)->get();

这将返回一个雄辩的实例,你可以做任何你需要的事情。