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

Kev*_*rke 7 php laravel eloquent

我需要使用Laravel进行原始数据库查询:

$results = DB::select("SELECT * FROM members 
    INNER JOIN (several other tables) 
    WHERE (horribly complicated thing) 
    LIMIT 1");
Run Code Online (Sandbox Code Playgroud)

我得到一个普通的PHP StdClass对象,其中包含成员表中属性的字段.我想将它转换为一个成员(一个Eloquent模型实例),看起来像这样:

use Illuminate\Database\Eloquent\Model;

class Member extends Model {
}
Run Code Online (Sandbox Code Playgroud)

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

Mop*_*ppo 17

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

$results = DB::select("SELECT * FROM members 
                       INNER JOIN (several other tables) 
                       WHERE (horribly complicated thing) 
                       LIMIT 1");

$models = Member::hydrate( $results->toArray() );
Run Code Online (Sandbox Code Playgroud)

或者你甚至可以让Laravel从原始查询中为你自动保湿:

$models = Member::hydrateRaw( "SELECT * FROM members...");
Run Code Online (Sandbox Code Playgroud)

编辑

来自Laravel 5.4的hydrateRaw已不再适用.我们可以使用fromQuery代替:

$models = Member::fromQuery( "SELECT * FROM members..."); 
Run Code Online (Sandbox Code Playgroud)

  • 这很好,但你会得到一组模型."LIMIT 1"在这里毫无意义. (2认同)
  • 当我这样做时,我再也无法选择关系了。 (2认同)