luuka / laravel-base-repository

该包的最新版本(v1)没有可用的许可信息。

一个简单的包,用于为Laravel创建make:repository命令

v1 2024-03-27 10:23 UTC

This package is auto-updated.

Last update: 2024-09-07 08:09:54 UTC


README

一个简单的包,用于为Laravel 5及以上版本添加php artisan make:repository命令

安装

使用以下命令使用composer安装此包

composer require luuka/laravel-base-repository --dev

或者将以下内容添加到composer.json的require-dev部分并运行composer update

"require-dev": {
          "luuka/laravel-base-repository": "*"
}

用法

php artisan make:repository your-repository-name

示例

php artisan make:repository UserRepository

php artisan make:repository Backend/UserRepository

上述操作将在app目录内创建一个repositories目录。

一旦生成了仓库,请添加您的模型类并在模型函数中返回它,

示例

<?php

namespace Luuka;

use Luuka\LaravelBaseRepository\Repository\BaseRepository;
//use Your Model

/**
 * Class UserRepository.
 */
class UserRepository extends BaseRepository
{
    /**
     * @return string
     *  Return the model
     */
    public function model()
    {
        //return YourModel::class
    }
}

在创建新的仓库类之后,您需要在模型类中将BaseModel继承在model()函数中绑定。BaseModel看起来像

<?php

namespace Luuka\LaravelBaseModel\Model;

use Luuka\Traits\Filterable;
use Luuka\Traits\Sortable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class BaseModel extends Model
{
    use HasFactory;
    use Filterable, Sortable;
}

BaseModel使用了来自traits的两个范围函数:scopeFilter和scopeSort。也许您以后需要使用它。在创建每个新模型时,您扩展BaseModel


<?php

namespace App\Models;

use Luuka\LaravelBaseModel\Model\BaseModel;

class YourModel extends BaseModel
{
	// Filter with variable
	protected $filterable = ['name'];
	
	// Sort with variable;
	protected $sortable = ['name' => 'desc'];

    // Custom filter
    public function filterSearch($query, $value)
    {
        return $query->where('name', 'LIKE', '%' . $value . '%');
    }
	
	// Custom sorts
    public function sortName($query)
    {
        return $query->orderBy('name', 'desc');
    }
}



<form action="your_url" method="POST/GET">
	
	// Filter by name with name prefix
	<input type="text" name="search" placeholder="search by name">
	
	<button>Submit</button>
	
</form>

基本用法

<?php

namespace App\Http\Controllers\Backend;

use App\Http\Controllers\Controller;
use App\Repositories\UserRepository;
use Illuminate\Http\Request;

class SettingController extends Controller
{
    protected $userRepository;

    public function __construct(UserRepository $userRepository)
    {
        $this->userRepository = $userRepository;
    }

    public function index(Request $request)
    {
        $users = $this->userRepository->getAll($request->all());

        return view('backend.pages.users.index', compact('users'));
    }
}