从Laravel 5.1中的通用数据库查询中获取Eloquent模型的实例

时间:2015-09-12 11:48:27

标签: php laravel laravel-5 eloquent laravel-5.1

我的模型设置了不同的关系。假设我的Entry模型属于Supplier,所以通常我的模型文件中有supplier()方法。

到目前为止一切顺利,当我有Entry::find(1)->supplier这样的东西时,它的作用非常好。但是,什么是无效的是当我从Laravel中的通用DB ::查询中获取条目时,我显然无法访问supplier()方法,因为它不是Entry的实例。

$entries = DB::table('suppliers')
            ->join('entries', "supplier.id", '=', "entries.supplier_id")
            ->select('entries.*')
            ->where("supplier.name", 'like', "%{$name}%")
            ->get();

现在,如果我dd($entries);

我按预期得到了结果。但是,当我做类似的事情时:

dd($entries[0]->supplier); // or ->supplier()

我收到此错误:

  

未定义的属性:stdClass :: $ supplier

那么我如何(?)这些结果投射到Entry Eloquent模型中,以便我可以利用这些关系?

这是printr的{​​{1}}:

$entries

1 个答案:

答案 0 :(得分:2)

如@Zakaria所述,只需使用Eloquent:

$entries = Entry::with('supplier')
        ->join('supplier', "supplier.id", '=', "entries.supplier_id")
        ->where("supplier.name", 'like', "%{$name}%")
        ->get();

如果你真的需要"演员"他们,尝试这样的事情:

$entries = $yourDbQuery;
$c = new \Illuminate\Database\Eloquent\Collection;
foreach ($entries as $entry) {
    $entryModel = new \App\Entry;
    $c->add($entryModel->forceFill((array)$entry));
}
$c->load('supplier');