Я начал работать с хранилищами в Laravel и наткнулась ситуациями, когда я не уверен, если я handeling это правильный путь ...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);
}
}
Клиент basecontroller:
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'));
}
}
Некоторые расширение клиентской basecontroller:
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, ['...']);
Поскольку функция нагрузки() в хранилище не возвращает ничего, и я не приписывать ничего в индексе() функцию он чувствует поддельным как-то ... Может кто-нибудь подтвердить или отрицать это?
Update:
Возьмем, к примеру, этот кусок кода ниже (не работает):
function addToArray($array, $value)
{
array_push($array, $value);
}
$array = ['a', 'b', 'c'];
addToArray($array, 'd');
foreach($array as $value)
{
echo $value;
}
Так я подошел к этому в Laravel чувствует себя очень похоже, что заставляет меня чувствовать, что это не так: -).