我开始在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, ['...']);
因为存储库中的load()函数没有返回任何内容并且我在index()函数中没有任何内容,所以它会以某种方式感觉到伪造......有人可以确认或否认这个吗?
更新
以下面这段代码为例(不起作用):
function addToArray($array, $value)
{
array_push($array, $value);
}
$array = ['a', 'b', 'c'];
addToArray($array, 'd');
foreach($array as $value)
{
echo $value;
}
我在Laravel中接触这种方式的感觉非常相似,这让我觉得它错了: - )。
答案 0 :(得分:0)
虽然这个主题可能有不同的意见,但已经有一些固定的开源软件包为Laravel提供了一个简单但直观的存储库实现,允许您使用以下语法,例如:
$repository->with(['relationship']);
为了使您的存储库干净,所有关系都是延迟加载的,除非您调用with
方法并传递数组以急切加载某些关系。以下包的API非常简单&直观,我认为这将有助于你的方法。