2017-09-26 49 views
0

使用Laravel 5.4和VentureCraft/revisionable軟件包。Laravel's Revisionable歷史上的負載相關型號

我有3個機型:User,CompanyOrder

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)沒有任何的運氣。

+0

並非每個修訂歷史記錄都是針對company_id字段的,您可以先將它們過濾出來,然後按ID獲取公司 –

+0

也許我不清楚。我不在'company_id'字段中尋找更改。我試圖讓'Order'模型中進行更改的用戶的'公司'。所有的用戶都有一個相關的公司。 – Camilo

+1

瞭解!只是回答。 –

回答

0

我認爲這不適用於當前版本的軟件包。

背後的原因是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查看原來的問題。

1

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

+0

這是一個好的開始,我會嘗試一下。但它似乎並不急切加載。 – Camilo