我想使用Repository Pattern但我坚持语法。 我想得到我的函数index()。

第一步,我创建文件夹Repositories然后创建文件AuteurRepository.php

在此输入图像描述

在我的文件AuteurController中我有这个:

public function index()
{
   $auteurs = Auteur::oldest()->paginate(5);
   return view('admin.auteurs.index', compact('auteurs'))
           ->with('i', (request()->input('page', 1)-1)*5);
}

在我的模型中,我只有一个文件Auteur

protected $fillable = ['name', 'firstname'];

我有两个问题:

1)在我的文件AuteurRepository中我应该如何创建我的函数index()

我试过这个?

<?php 

namespace App\Repositories; 
use App\Auteur; 

class AuteurRepository
{
    public function index()
    {
        return Auteur::oldest()->paginate(5);
    }
}


?>

我的第二个问题是在我的AuteurController中我不明白该怎么办?

我现在有这个

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Auteur;
use App\Repositories\AuteurRepository; 

class AuteurController extends Controller
{


    protected $auteurs;

    public function __construct(AuteurRepository $auteurs)
    {
        $this->auteurs = $auteurs; 
    }

    public function index(Request $request)
    {

        return view('admin.auteurs.index', compact('auteurs'))
    }
}

===============>>#1 票数:6 已采纳

1)在我的文件AuteurRepository中我应该如何创建我的函数index()?

你可以给它命名你想要的,index(),allRecords(),.... 并执行您需要的查询。

我的第二个问题是在我的AuteurController中我不明白该怎么办?

如果您的存储库如下所示:

class AuteurRepository
{
    public function index()
    {
        return Auteur::oldest()->paginate(5);
    }
}

在您的控制器中,您可以像下面这样访问repo index函数:

class AuteurController extends Controller
{


    protected $auteurs;

    public function __construct(AuteurRepository $auteurs)
    {
        $this->auteurs = $auteurs; 
    }

    public function index(Request $request)
    {
        $auteurs = $this->auteurs->index();

        return view('admin.auteurs.index', compact('auteurs'))
    }
}

编辑
此外,您可以自定义一点查询。 例如:

在存储库中接受索引方法中的参数:

class AuteurRepository
{
    public function index($filters)
    {

        $pagination = $filters['pagination'];
        $order = $filters['order'];

        return Auteur::orderBy('created_at', $order)
                       ->paginate($pagination);
    }
}

并在控制器中创建要作为参数传递的数组:

    $filters = [
        'pagination' => 5,
        'order' => 'asc',
    ];

要么

    $filters = [
        'pagination' => 10,
        'order' => 'desc',
    ];

或者您可以从请求中获取值(请确保在请求输入为空时保留默认值)

    $filters = [
        'pagination' => $request->input('pagination')?: 5,
        'order' => $request->input('order')?: 'asc',
    ];

然后将参数传递给repo:

    $auteurs = $this->auteurs->index($filters);

希望能帮助到你 ;-)

  ask by user11124425 translate from so

未解决问题?本站智能推荐:

1回复

存储库模式laravel的逻辑

我正在学习使用Laravel框架。 我碰到了存储库,说在几个站点上进行开发是一种很好的做法。 我找到了一些可帮助在Laravel中实施此做法的软件包,但缺少了一些功能,但我认为我无法很好地理解其逻辑及其好处。 考虑研究这一部分,我创建了一个程序包,该程序包说明了如何看待此实现,
3回复

使用Laravel实现存储库模式

最近我开始研究Laravel 4及其功能。 我想实现Repository模式以在那里移动模型逻辑。 在这一点上,我面临着如何组织它的一些不便或误解。 一般问题我有这样的事情: 是否有可能在Laravel实现和应用这种模式而不会头痛,是否值得 ? 这个问题将分为几个部分,这引起了我的困
1回复

Laravel:ORM独立存储库模式

我偶然发现了有关在Laravel中实现存储库模式的不同文章,所有这些使我感到困惑。 他们每个人都在强调“保持ORM独立性”,但实际上没有人显示示例代码。 我在这里使用我的存储库样本结构,我认为它在某种程度上不是ORM独立的。 但是我需要使用REAL REPOSITORY PATTERN
1回复

在存储库模式中保存关系的好方法是什么?

在保存数据方面,我对使用存储库模式感到困惑。 我写了讨论板,所以当用户创建一个新线程时,我需要保存很多对象(关系)。 基本上我需要: 在topics表中创建新记录 在posts表中创建新记录 分配帖子的附件 将用户ID添加到subscribers表(以便他/
1回复

Laravel仓库模式合约

我正在尝试使用Laravel实现存储库模式。 我可以理解使用接口来抽象数据存储的优点。 但是接口中定义的方法返回的对象呢? 是否也应该在某种抽象类中定义它们? 例如: 通过在我的控制器中执行以下操作: 我在打破设计模式吗?
2回复

消耗REST API的最佳设计模式是什么

我想在Laravel(一个MVC框架)中使用Rest API,但我求助于使用__call并且想知道是否有更好的设计模式。 我知道这是一个不好的选择,我正在寻找其他模式,但这是我的Repository类: 然后在控制器构造函数中创建它的一个实例: 并像这样在控制器中使用它:
1回复

在Laravel 5.x中使用Repository Pattern时,我们是否应该仅使用控制器中的叙述方法?

我在Laravel中有一个典型的存储库模式结构。 以水果模型为例我有: 类EloquentFruitRepository扩展抽象EloquentRepository实现FruitRepositoryInterface 。 FruitRepositoryInterface扩展了Rep
1回复

Laravel 5的存储库模式

我在app / Repositories中创建了一些Repositories类,如SeriesRepository , CommentRepository等。我这样做的想法是抽象数据库调用,所以我可以使用Eloquent或查询构建器甚至原始SQL,如果我愿意,而不必更改查询在代码中的数千个地方。
2回复

Laravel存储库模式

我读了一些有关存储库模式的文章,我想知道为什么当我可以直接调用Model并返回数据时需要构造函数的原因? 我也认为Book::all(); 比$this->model->all()更少的代码。 这只是一个好习惯还是有目的? 和
2回复

Laravel-存储库模式问题

我有使用存储库模式的Laravel应用程序。 我还有一个名为EloquentRepository的抽象类,其中包含基本方法。 我所有的存储库都有一个update()方法,在这里我仅使用ID和数组更新模型: 现在,我还有一个Server存储库: 所以现在,我不必向我的Eloqu