laravel repository, 基于Eloquent Model二次封装, 抛弃传统的链式调用, 让代码更简洁, 使用更直观的数组来操作model
MIT License
laravel-repository
provides the basic repository
class for laravel
model The package was made to provide more
More external methods, and more friendly editor prompts; layering the code, repository
is
responsible for external business logic processing, model
is only responsible for the definition
of the fields, attributes, query conditions, and return values of the data table. It does not
participate in specific logical operations, and does not serve the control layer.
model
advantages:model
does not automatically handle extra fields when adding or modifyingmodel
queries, query directly using arrayscomposer require littlebug/laravel-repository:2.0.*
or add this to require section in your composer.json file:
"littlebug/laravel-repository": "2.0.*"
then run composer update
model
and repository
Suppose you have users in your database, or you replace users with the table names in your database.
php artisan core:model --table=users --name=User
The command will be at:
User
file under app/Models/
fileUserRepository
file under app/Repositories/
filerepository
in the controller<?php
use Illuminate\Routing\Controller;
use Littlebug\Repository\Tests\Stubs\UserRepository;
class UsersController extends Controller
{
/**
* @var UserRepository
*/
private $userRepository;
public function __construct(UserRepository $userRepository)
{
$this->userRepository = $userRepository;
}
public function index()
{
// Paging queries, returning paging objects
$paginate = $this->userRepository->paginate([
'name:like' => 'test',
'status' => [1, 2], // Automatically converts to an in query,
// Add complex queries and generate SQL: ("users"."status" = ? or "users"."age" >= ? or ("users"."status" = ? and "users"."age" != ?))
// More instructions: https://wanchaochao.github.io/laravel-repository/?page=repository#5.3-%E9%A2%84%E5%AE%9A%E4%B9%89%E5%AD%97%E6%AE%B5%E6%9F%A5%E8%AF%A2
'or' => [
'status' => 1,
'age:gte' => 26,
'and' => [
'status' => 1,
'age:neq' => 24,
],
],
], [
'user_id',
'username',
// Statistical associated data; withCount
'posts_count',
// Query the field information for the association table if the model defines the association relationship
'ext' => [
'user_id',
'ext_avatar',
],
]);
return view('users.index', compact('paginate'));
}
public function create()
{
// Add data and return an array
$user = $this->userRepository->create(request()->all());
dump($user);
}
public function update()
{
// Modify the data and return the number of modified rows
$row = $this->userRepository->update(request()->input('id'), request()->all());
dump($row);
}
public function delete()
{
// Deletes data and returns the number of rows deleted
$row = $this->userRepository->delete(request()->input('id'));
dump($row);
}
}
In addition to the injection method invocation described above, you can also use static method invocation; As follows:
use Littlebug\Repository\Tests\Stubs\UserRepository;
$paginate = UserRepository::instance()->paginate(['status' => 1]);
// Query a piece of data and return an array
$user = UserRepository::instance()->find(['status' => 1, 'id:gt' => 2]);
method name | return value | description |
---|---|---|
find($conditions, $columns = ['*']) |
null|array |
Querying individual data |
findBy($conditions, $column) |
null|mixed |
Query a single field for a single piece of data |
findAll($conditions, $columns = ['*]) |
array |
Query multiple data |
findAllBy($conditions, $column) |
array |
Querying a single field array of multiple data |
first($conditions, $column) |
null|model |
Retrieve a single model |
get($conditions, $column) |
Collection |
Retrieve the collection |
method name | return value | description |
---|---|---|
count($conditions, $column = '*') |
int |
The number of statistical |
max($conditions, $column) |
mixed |
The maximum |
min($conditions, $column) |
mixed |
The minimum value |
avg($conditions, $column) |
mixed |
The average |
sum($conditions, $column) |
mixed |
sum |
method name | return value | description |
---|---|---|
increment($conditions, $column, $amount = 1, $extra = []) |
int |
Since the increase |
decrement($conditions, $column, $amount = 1, $extra = []) |
int |
Since the reduction of |
firstOrCreate(array $attributes, array $value = []) |
model |
The query does not exist so create |
updateOrCreate(array $attributes, array $value = []) |
model |
Modifications do not exist so create |
Please check more about repository
Commands support specifying database connections such as --table=dev.users
core:model
generates model
class files and repository
class files by querying database table information.
php artisan core:model --table=users --name=User
core:repository
generates the repository
class file
php artisan core:repository --model=User --name=UserRepository
core:request
generates request
verification class file by querying database table information
php artisan core:request --table=users --path=Users