2016-06-03 6 views
0

Я начал работать с хранилищами в 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 чувствует себя очень похоже, что заставляет меня чувствовать, что это не так: -).

ответ

0

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

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

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

Оформить заказ: https://github.com/rinvex/repository/

 Смежные вопросы

  • Нет связанных вопросов^_^