Laravel真正的存储库模式

时间:2017-12-19 13:55:38

标签: php laravel repository-pattern

我正在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模型加载的所有可能的关系?

1 个答案:

答案 0 :(得分: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();