[英]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.