Laravel真正的存储库模式

问题描述 投票:1回答:1

我正在Laravel中实现一个存储库模式,并对实现有疑问。

例如,我可以让UserRepository类有遵循Eloquent标准的方法:

public function create(array $properties)
{
    return $this->entity->create($properties);
}

public function update($id, array $properties)
{
    return $this->find($id)->update($properties);
}

public function delete($id)
{
    return $this->find($id)->delete();
}

然后将该存储库注入我需要与用户做某事的位置。

我在这里看到的问题是......当我这样做时,后面会发生什么:

$this->userRepository->authenticatedUser()->posts

如果通过posts调用Eloquent关系,这是否违反了存储库模式?

有一个“真正的”存储库模式是否意味着处理通过User模型加载的所有可能的关系?

php laravel repository-pattern
1个回答
2
投票

保持干燥。在这里,您只需复制Eloquent已经提供的大量代码。

但是,如果调用更复杂并且您不想在整个代码库中重复逻辑,则可以使用RepositoryPattern。

public function clientContact($clientId) {
     return \Auth::user()->manager()->superBoss()->company()->clients()->where('client_id', $clientID)->primaryContact()->firstOrFail();
}

在那种情况下,它是有道理的。

但是,如果您想要经过身份验证的用户的帖子,那么只需使用雄辩的关系。

$posts = \Auth::user()->posts()->get();
© www.soinside.com 2019 - 2024. All rights reserved.