1

使用 Laravel 5.4 和VentureCraft/revisionable包。

我有 3 个模型UserCompanyOrder

Order模型实现了 Revisionable 特征:

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 特征覆盖各种方法(例如revisionHistoryidentifiableName),但没有任何运气。

4

2 回答 2

1

您可以使用该更改的$company = $revision->userResponsible()->company获得公司。UserOrder

于 2017-09-27T15:27:26.583 回答
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中查看原始问题。

于 2017-09-27T19:53:36.517 回答