Использование 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
) из ревизионной черты без удачи.
Ты можешь использовать $company = $revision->userResponsible()->company
получить компанию User
что изменить Order
,
Я думаю, что это невозможно с текущей версией пакета.
Причина в том, что 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.