使用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;
}
我尝试从可修改的特性中覆盖各种方法(例如revisionHistory
和identifiableName
)而没有任何运气。
答案 0 :(得分:1)
您可以使用$company = $revision->userResponsible()->company
与User
建立联系,以更改Order
。
答案 1 :(得分:1)
我认为使用当前版本的软件包是不可能的。
背后的原因是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中查看原始问题。