从 Laravel 5.1 中的通用数据库查询中获取 Eloquent 模型的实例
Get instance of Eloquent model from generic DB query in Laravel 5.1
我的模型设置了不同的关系。假设我的 Entry
模型属于 Supplier
,所以通常我的模型文件中有一个 supplier()
方法。
到目前为止一切顺利,当我有类似 Entry::find(1)->supplier
的东西时,它的效果非常好。但是,当我从 Laravel 中的通用 DB:: 查询中获取条目时,不起作用的是,我显然无法访问 supplier()
方法,因为它不是 Entry
.[= 的实例26=]
$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()
我收到这个错误:
Undefined property: stdClass::$supplier.
那么我如何 cast (?) 这些结果到 Entry
Eloquent 模型以便我可以利用这些关系?
这是 $entries
的 printr
:
Array
(
[0] => stdClass Object
(
[id] => 1
[user_id] => 0
[archived] => 0
[supplier_id] => 5
[customer_id] => 1
[contact] => dfgfdg
[commission] => dfgdfg
[entrance_date] => 2015-09-22 16:52:33
[cost_estimate] => 1
[status] => 1
[type] => 1
[watch_id] => 7
[reference] => dfgdfg
[serial_number] => 0
[delivery_date] => 2015-09-07 16:52:33
[articles_json] =>
[total_sales_cost_netto] =>
[gross_profit_netto] =>
[gross_profit_brutto] =>
[created_at] => 2015-09-09 20:10:02
[updated_at] => 2015-09-11 16:52:33
)
)
如@Zakaria 所述,只需使用 Eloquent:
$entries = Entry::with('supplier')
->join('supplier', "supplier.id", '=', "entries.supplier_id")
->where("supplier.name", 'like', "%{$name}%")
->get();
如果您确实需要 "cast" 它们,请尝试这样的操作:
$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');
我的模型设置了不同的关系。假设我的 Entry
模型属于 Supplier
,所以通常我的模型文件中有一个 supplier()
方法。
到目前为止一切顺利,当我有类似 Entry::find(1)->supplier
的东西时,它的效果非常好。但是,当我从 Laravel 中的通用 DB:: 查询中获取条目时,不起作用的是,我显然无法访问 supplier()
方法,因为它不是 Entry
.[= 的实例26=]
$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()
我收到这个错误:
Undefined property: stdClass::$supplier.
那么我如何 cast (?) 这些结果到 Entry
Eloquent 模型以便我可以利用这些关系?
这是 $entries
的 printr
:
Array
(
[0] => stdClass Object
(
[id] => 1
[user_id] => 0
[archived] => 0
[supplier_id] => 5
[customer_id] => 1
[contact] => dfgfdg
[commission] => dfgdfg
[entrance_date] => 2015-09-22 16:52:33
[cost_estimate] => 1
[status] => 1
[type] => 1
[watch_id] => 7
[reference] => dfgdfg
[serial_number] => 0
[delivery_date] => 2015-09-07 16:52:33
[articles_json] =>
[total_sales_cost_netto] =>
[gross_profit_netto] =>
[gross_profit_brutto] =>
[created_at] => 2015-09-09 20:10:02
[updated_at] => 2015-09-11 16:52:33
)
)
如@Zakaria 所述,只需使用 Eloquent:
$entries = Entry::with('supplier')
->join('supplier', "supplier.id", '=', "entries.supplier_id")
->where("supplier.name", 'like', "%{$name}%")
->get();
如果您确实需要 "cast" 它们,请尝试这样的操作:
$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');