在Laravel的可修订历史记录中急切加载相关模型

时间:2017-09-26 19:31:34

标签: php laravel laravel-5 revisionable

使用Laravel 5.4和VentureCraft/revisionable包。

我有3个模型:UserCompanyOrder

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;
}

我尝试从可修改的特性中覆盖各种方法(例如revisionHistoryidentifiableName)而没有任何运气。

2 个答案:

答案 0 :(得分:1)

您可以使用$company = $revision->userResponsible()->companyUser建立联系,以更改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中查看原始问题。