Стремительная загрузка связанных моделей в Revisionable истории Laravel

Использование 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) из ревизионной черты без удачи.

0

Решение

Ты можешь использовать $company = $revision->userResponsible()->company получить компанию User что изменить Order,

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.

0

По вопросам рекламы [email protected]