1. Go to this page and download the library: Download awes-io/repository library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
awes-io / repository example snippets
// $repository->smartPaginate() related parameters
'smart_paginate' => [
// name of request parameter to take paginate by value from
'request_parameter' => 'limit',
// default paginate by value
'default_limit' => 15,
// max paginate by value
'max_limit' => 100,
]
protected $searchable = [
// where 'title' equals 'Title'
'title',
];
protected $scopes = [
// and custom parameter used in your scope
'custom' => MyScope::class,
];
class MyScope extends ScopeAbstract
{
public function scope($builder, $value, $scope)
{
return $builder->where($scope, $value)->orWhere(...);
}
}
namespace App;
use Illuminate\Database\Eloquent\Model;
class News extends Model
{
...
}
namespace App;
use AwesIO\Repository\Eloquent\BaseRepository;
class NewsRepository extends BaseRepository
{
public function entity()
{
return News::class;
}
}
use App\NewsRepository;
class NewsController extends BaseController
{
protected $news;
public function __construct(NewsRepository $news)
{
$this->news = $news;
}
....
}
$news = $this->news->get();
$news = $this->news->first();
$news = $this->news->find(1);
$news = $this->news->->findWhere([
// where id equals 1
'id' => '1',
// other "where" operations
['news_category_id', '<', '3'],
...
]);
use AwesIO\Repository\Contracts\CriterionInterface;
class MyCriteria implements CriterionInterface {
protected $conditions;
public function __construct(array $conditions)
{
$this->conditions = $conditions;
}
public function apply($entity)
{
foreach ($this->conditions as $field => $value) {
$entity = $entity->where($field, '=', $value);
}
return $entity;
}
}
use App\NewsRepository;
class NewsController extends BaseController
{
protected $news;
public function __construct(NewsRepository $news)
{
$this->news = $news;
}
public function index()
{
return $this->news->withCriteria([
new MyCriteria([
'category_id' => '1', 'name' => 'Name'
]),
new WhereAdmin(),
...
])->get();
}
}
protected $searchable = [
// where 'title' equals parameter value
'title',
// orWhere equals
'body' => 'or',
// where like
'author' => 'like',
// orWhere like
'email' => 'orLike',
];
public function index($request)
{
return $this->news->scope($request)->get();
}
protected $scopes = [
// orderBy field
'orderBy' => OrderByScope::class,
// where created_at date is after
'begin' => WhereDateGreaterScope::class,
// where created_at date is before
'end' => WhereDateLessScope::class,
];
$this->news->scope($request)->get();
public $orderable = ['email'];
public function scope($request)
{
// apply build-in scopes
parent::scope($request);
// apply custom scopes
$this->entity = (new NewsScopes($request))->scope($this->entity);
return $this;
}
use AwesIO\Repository\Scopes\ScopesAbstract;
class NewsScopes extends ScopesAbstract
{
protected $scopes = [
// here you can add field-scope mappings
'field' => MyScope::class,
];
}
use AwesIO\Repository\Scopes\ScopeAbstract;
class MyScope extends ScopeAbstract
{
public function scope($builder, $value, $scope)
{
return $builder->where($scope, $value);
}
}