簡體   English   中英

Laravel上的存儲庫模式

[英]Repository Pattern on Laravel

我想使用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)在我的文件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);

希望能幫助到你 ;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM