Laravel Lazy нетерпеливо загружается с хранилищем

Я начал работать с репозиториями в Laravel и столкнулся с ситуацией, когда я не уверен, правильно ли я делаю это …

Репозиторий пользователя:

interface UserRepositoryInterface
{
public function findByID(int $user_id);
public function load(User $user, array $relations);
}

class UserRepository implements UserRepositoryInterface
{
public function findByID(int $user_id)
{
return User::find($user_id);
}
public function load(User $user, array $relations)
{
$user->load($relations);
}
}

Клиентский базовый контроллер:

protected $user_repository, $client;

class Controller extends BaseController
{
public function __construct(Request $request, UserRepositoryInterface $user_repository)
{
$this->user_repository = $user_repository;
$this->client = $this->user_repository->findByID($request->route('client_id'));
}
}

Некоторое расширение клиентского базового контроллера:

use App\Http\Controllers\...\Controller as ClientsController;

class SomeController extends ClientsController
{
public function index()
{
$this->user_repository->load($this->client, ['addresses', 'bank_accounts', 'etc']);
return $this->client;
}
}

Хотя функции index () действительно показывают клиента со связанными моделями, мне кажется, что мой подход неправильный, но, если у меня уже есть клиент, то более естественным будет загрузить отсутствующие связанные модели, чем выполнить вызов ниже (где я получаю пользователь снова):

$this->client = $this->user_repository->findByIDWithRelations($user_id, ['...']);

Поскольку функция load () в хранилище ничего не возвращает, и я ничего не назначаю в функции index (), это как-то кажется фальшивым … Кто-нибудь может подтвердить или опровергнуть это?

Обновить:

Возьмите для примера этот фрагмент кода ниже (не работает):

function addToArray($array, $value)
{
array_push($array, $value);
}

$array = ['a', 'b', 'c'];

addToArray($array, 'd');

foreach($array as $value)
{
echo $value;
}

То, как я подошел к этому в Laravel, кажется очень похожим, и я чувствую, что это неправильно :-).

1

Решение

Хотя в этом разделе могут быть разные мнения, уже есть некоторые самоуверенные пакеты с открытым исходным кодом, которые предоставляют простую, но интуитивно понятную реализацию репозиториев для Laravel, которая позволяет вам использовать, например, следующий синтаксис:

$repository->with(['relationship']);

Так что ваш репозиторий является чистым, все отношения загружаются лениво, если вы не вызываете with метод и передать массив, чтобы нетерпеливо загрузить некоторые отношения. API следующего пакета довольно прост & интуитивно, и я думаю, что это поможет вам в вашем подходе.

Проверять, выписываться: https://github.com/rinvex/repository/

0

Другие решения

Других решений пока нет …

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