簡體   English   中英

Laravel可修訂歷史中與負載相關的模型

[英]Eager load related models in Laravel's Revisionable history

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

我嘗試過覆蓋Revisionable特征中的各種方法(例如revisionHistoryidentifiableName ),但沒有任何運氣。

您可以使用$company = $revision->userResponsible()->company獲取更改OrderUser公司。

我認為使用該軟件包的當前版本是不可能的。

其背后的原因是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM