我正在尝试学习存储库模式,似乎有点困惑,当我急于加载关系并将db逻辑排除在控制器之外时,如何使用此存储库模式。
快速概述我的存储库/应用程序结构。
app/
Acme/
Repositories/
RepositoryServiceProvider.php
Product/
EloquentProduct.php
ProductInterface.php
Category/
EloquentCategory.php
CategoryInterface.php
示例ProductInterface。php
<?php namespace GD\Repositories\Product;
interface ProductInterface
{
public function all();
public function find($id);
public function findBySlug($slug);
}
示例类别接口。php
<?php namespace GD\Repositories\Category;
interface CategoryInterface
{
public function all();
public function find($id);
public function findBySlug($slug);
}
好的,最简单的部分是使用DI向控制器注入模型依赖关系。
列出与相关产品的所有类别更加困难,因为我不再使用雄辩的模型。我正在使用一个界面,它没有暴露所有雄辩的方法。
如果我没有在我的EloquentCategory类中实现with方法,这将不起作用。。。
public function show($slug)
{
return Response::json($this->category->findBySlug($slug)->with('products'), 200);
}
我是否应该创建一个单独的服务类来将两个存储库粘合在一起?e、 g.允许以下情况:
public function __construct(ShopService $shop)
{
$this->shop = $shop;
}
public function show($slug)
{
return Response::json( $this->shop->getProductsInCategory($slug), 200 );
}
或者,我应该在我的类别存储库中实现with方法吗?
public function with($relation)
{
return Category::with($relation);
}
最后,我对存储库模式用法的理解是否正确?
有一个很简单的方法做到这一点并深入探讨在这个环节
http://heera.it/laravel-repository-pattern#.U6XhR1cn-f4
我一直在寻找精确的解决方案,到目前为止效果很好
因此,您的想法是在存储库代码中声明这一点
public function __construct(\Category $category)
{
$this->category = $category;
}
public function getAllUsers()
{
return $this->category->all();
}
public function __call($method, $args)
{
return call_user_func_array([$this->category, $method], $args);
}
在缺少某些函数时强制调用模型
您考虑过了,存储库只是您的控制器
和模型
之间的一个链接/桥梁,因此控制器使用存储库
类而不是模型
直接在该存储库中使用模型
声明您的方法,例如:
<?php namespace GD\Repositories\Category;
interface CategoryInterFace{
public function all();
public function getCategoriesWith($with);
public function find($id);
}
现在在repository类中实现接口:
<?php namespace GD\Repositories\Category;
use \EloquentCategory as Cat; // the model
class CategoryRepository implements CategoryInterFace {
public function all()
{
return Cat::all();
}
public function getCategoriesWith($with)
{
return Cat::with($with)->get();
}
public function find($id)
{
return Cat::find($id):
}
}
要在控制器中使用它:
<?php
use GD\Repositories\Category\CategoryInterFace;
class CategoryController extends BaseController {
public function __construct(CategoryInterFace $category)
{
$this->cat = $category;
}
public function getCatWith()
{
$catsProd = $this->cat->getCategoriesWith('products');
return $catsProd;
}
// use any method from your category
public function getAll()
{
$categories = $this->cat->all();
return View::make('category.index', compact('categories'));
}
}
注意:省略了存储库的IoC
绑定,因为这不是您的问题,您知道这一点。
更新:我在这里写了一篇文章:LARAVEL–使用存储库模式。
我查阅了许多存储库设计模式教程,如 https://asperbrothers.com/blog/implement-repository-pattern-in-laravel/ https://www.larashout.com/how-to-use-repository-pattern-in-laravel https://laravelarticle.com/repository-desig
我正在尝试实现一个简单的REST服务,该服务基于具有Spring启动和Spring数据Rest的JPA存储库。(请参阅此教程)如果将以下代码与 gradle 一起使用,则运行良好: 为了让事情变得更简单,我使用Spring boot CLI(“Spring run”命令)尝试了相同的代码。 不幸的是,这似乎不起作用@RepositoryRestResource似乎无法像@RestControlle
嗨,我正在尝试使用抽象类在 laravel 中实现存储库模式,以拥有一些我新手的基本功能。 我正在得到 分析错误:语法错误,意外'- 在AbstractRepository一行- AbstractRepository.php ReportRepositoryInterface.php ReportRepository.php ReportsController.php 有谁能开导一下吗?谢谢
关于存储库模式,我有几个问题: > 如果我只使用离线数据库(例如Room with LiveData),是否使用存储库模式? 如果我的应用程序现在离线,但将来会连接到远程数据库,那么我应该实现存储库模式还是以后再做就不会有问题了?
在阅读了T. Otwell关于Laravel中良好设计模式的书后,我在Laravel 4中创建了一个应用程序,我发现自己为应用程序上的每个表创建了存储库。 我最终得到了以下表格结构: 学生:身份证,姓名 我有用于所有这些表的find、create、update和delete方法的存储库类。每个存储库都有一个与数据库交互的雄辩模型。根据Laravel的文档在模型中定义了关系:http://larav
我一直使用Repository模式,但对于我的最新项目,我想看看是否可以完善它的使用和“工作单元”的实现。我越开始挖掘,我就开始问自己:“我真的需要它吗?” 现在这一切都始于对 Stackoverflow 的几条评论,并追溯到 Ayende Rahien 在他的博客上的帖子,其中有 2 条具体, < li >存储库是新的单一存储库 问:没有仓库的生活值得活下去吗 这可能会永远被谈论,这取决于不同的