[英]Eager load related models in Laravel's Revisionable history
使用Laravel 5.4和VentureCraft / revisionable軟件包。
我有3個模型: User
, Company
和Order
。
Order
模型實現了可修訂的特征:
namespace App\Models;
class Order extends Eloquent {
use \Venturecraft\Revisionable\RevisionableTrait;
// ...
}
User
模型與Company
模型有關系:
public function company() {
return $this->belongsTo('App\Models\Company');
}
我希望從訂單修訂中加載用戶的公司。 像這樣
$order = Order::with('revisionHistory.user.company')->find(1);
foreach($order->revisionHistory as $revision) {
$company = $revision->user->company;
}
我嘗試過覆蓋Revisionable特征中的各種方法(例如revisionHistory
和identifiableName
),但沒有任何運氣。
您可以使用$company = $revision->userResponsible()->company
獲取更改Order
的User
公司。
我認為使用該軟件包的當前版本是不可能的。
其背后的原因是userResponsible()
不是實際的關系,它只是一個返回User
模型的實例的函數。
為了允許急切的加載,需要這樣的事情:
public function userResponsible()
{
if (class_exists($class = '\Cartalyst\Sentry\Facades\Laravel\Sentry')) {
return $this->belongsTo(Config::get('sentry::users')['model'], 'user_id');
} else if (class_exists($class = '\Cartalyst\Sentinel\Laravel\Facades\Sentinel')) {
return $this->belongsTo(Config::get('sentinel::users')['model'], 'user_id');
} else {
return $this->belongsTo(Config::get('auth.model'), 'user_id');
}
}
然后,您將可以像這樣渴望加載:
$order = Order::with('revisionHistory.userResponsible.company')->find(1);
您可以在GitHub中查看原始問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.