diviky/bright
最新稳定版本:v7.0.30
Composer 安装命令:
composer require diviky/bright
包简介
Framework extension
README 文档
README
Install
composer require diviky/bright
Filter the query with input values
$filters = []; // $query->whereRaw('date(created_at) = ?', ['2019-10-12']) $filters[] = ['date[created_at]' => date('Y-m-d')]; // $query->whereDateBetween('created_at between ? and ? ', ['2019-10-12', '2019-10-22']) $filters[] = ['range[created_at]' => date('Y-m-d') .' - '. date('Y-m-d')]; // $query->whereBetween('created between ? and ? ', [strtotime('-1 day'), time()]) $filters[] = ['timestamp[created]' => date('Y-m-d') .' - '. date('Y-m-d')]; // $filters[] = ['unixtime[created]' => date('Y-m-d') .' - '. date('Y-m-d')]; $filters[] = ['between[created]' => date('Y-m-d') .' - '. date('Y-m-d')]; $filters[] = ['filter[name]' => 'bright']; // $query->where('name', '=', 'bright') $filters[] = ['filter[first_name|last_name]' => 'bright']; // $query->where('first_name', '=', 'bright')->orWhere() $filters[] = ['lfilter[name]' => 'bright']; // $query->where('name', 'like', '%bright%') $filters[] = ['rfilter[name]' => 'bright']; // $query->where('name', 'like', 'bright%') $filters[] = ['efilter[name]' => 'bright']; // $query->where('name', 'like', '%bright') $rows = DB::table('users') ->filter($filters) ->get();
Database Filter
filter method used to filter the database columns in query builder. it accepts requets object as array.
Avaliable filters
filter[] uses the $builder->where($column, $value). uses array key as column name and value as value. ex: filter[column]='value'
lfilter[] uses the $builder->where($column, '%'.$value.'%') with like match. uses array key as column name and value as value. ex: lfilter[column]='value'
use the | notation to filter or condition. ex: filter[comments|title]=xxx
use the : notation to filter with relation table. ex: filter[posts:title]=xxx
use the . notation to filter the table alias in join query. ex: filter[comments.title]=xxx
use the scope[] to filter the model scopes. ex: scope[status]=1 will run $builder->status(1)
use parse[] to DSL Parser for a filter query langague.
Example queries in this language:
price = 100price != 100price > 100price < 100price <= 100price >= 100name =~ "brig%"price > 100 AND active = 1status = "pending" OR status = "approved"product.price > 100 AND category.id = 7product:price > 100 AND category:id = 7name =~ "Foo%"created_at > "2017-01-01" and created_at < "2017-01-31"status = 1 AND (name = "PHP Rocks" or name = "I ♥ PHP")
Model Relations
Return single model with merged attributes from relations
flattern
The flattern($except, $exlcude) method merge the key and values of releations into primary model attributes and return the combines attributes. Releation keys will overwrite the primary keys if they are same.
use App\Models\User; $rows = Book::with('author')->get(); $rows->transform(function($row) { return $row->flattern(); });
flat
The flat($except, $exlcude) method merge the key and values of releations into primary model attributes and return the combines attributes.
use App\Models\User; $rows = Book::with('author')->get(); $rows->transform(function($row) { return $row->flat(); });
some
The some($keys) method get few keys from the relationships and primary model.
use App\Models\User; $rows = Book::with('author')->get(); $rows->transform(function($row) { return $row->some(['id', 'author.name']); });
except
The except($keys) method get few keys from the relationships and primary model.
use App\Models\User; $rows = Book::with('author')->get(); $rows->transform(function($row) { return $row->except(['author.id']); });
merge
The merge($keys) method add additional key value pairs to model attributes.
use App\Models\User; $rows = Book::with('author')->get(); $rows->transform(function($row) { return $row->merge(['extra' => 'value']); });
concat
The concat($keys) method add relations key values to attributes.
use App\Models\User; $rows = Book::with('author')->get(); $rows->transform(function($row) { return $row->concat(['author.id','author.name']); });
combine
The combine($keys) method to merge and contact the releations and attributes.
use App\Models\User; $rows = Book::with('author')->get(); $rows->transform(function($row) { return $row->combine(['author.id', 'author.name']); });
Eloquent: Collections
flatterns
The flatterns($except, $exlcude) method merge the key and values of releations into primary model attributes and return the combines attributes. Releation keys will overwrite the primary keys if they are same.
use App\Models\User; $books = Book::with('author')->get(); $books = $books->flatterns($except, $exclude);
flats
The flats($except, $exlcude) method merge the key and values of releations into primary model attributes and return the combines attributes.
use App\Models\User; $books = Book::with('author')->get(); $books = $books->flats($except, $exclude);
few
The few($keys) method get few keys from the relationships and primary model.
use App\Models\User; $books = Book::with('author')->get(); $books = $books->few(['id', 'author.name']);
Flatten Relations
Return single model with merged attributes from relations
// except the relations from merge $model = $model->flatten($except); // Take some keys $model = $model->some(['id']); // Take except $model = $model->except(['id']); // Append keys to attributes $model = $model->merge(['id' => 1]); // Apped relation keys to attributes $model = $model->concat(['relation.id']); // combination of merge and contact $model = $model->combine(['relation.id']);
Sorting task
<tbody ajax-content class="table_sortable_body"> ... <td sortable> <i class="fa fa-arrows-v fa-lg"></i> <input type="hidden" name="sorting[{{ $row->id }}]" value="{{ $row->ordering }}" /> </td> </tbody>
if ($task == 'sorting') { $sorting = $this->input('sorting'); $this->get('resolver')->getHelper('speed')->sorting('table', $sorting, 'id'); return []; }
Builder Extended Methods
Search multiple columns and relations
Post::whereLike(['name', 'text', 'author.name', 'tags.name'], $searchTerm)->get();
Iterating results
If you like fetch all the rows with chunks and modify using callaback
$rows = DB::table('large_table')->iterate(1000); $rows = DB::table('large_table')->iterate(1000, function($row) { return $row; });
Get results from multiple tables
If you have data in multiple tables, want to retrive table after table with pagination
$rows = DB::tables(['roles', 'roles1', 'roles2'])->complexPaginate();
Cache the query results
If you want to cache the results
$rows = DB::table('uses') ->remember($minutes, $cache_key) ->get(); $rows = DB::table('uses') ->rememberForever($cache_key) ->get();
Delete from select query
$rows = DB::table('users') ->filter($filters) ->deletes();
$rows = DB::table('users') ->whereDateBetween('created_at', [date(), date()]) ->get();
Get Trashed && Non Trashed
Get non deleted items
$rows = DB::table('users') ->withOutTrashed() ->get();
Get only deleted items
$rows = DB::table('users') ->onlyTrashed() ->get();
Raw Expressions
$rows = DB::table('orders') ->groupByRaw(['username']); ->groupByRaw('price * ? as price_with_tax', [1.0825]); ->get()
$rows = DB::table('orders') ->selectRaw(['max(price)', 'order_id']); ->groupByRaw('price * ? as price_with_tax', [1.0825]); ->get()
$rows = DB::table('orders') ->selectRaw(['max(price)', 'order_id']); ->whereBetweenRaw('max(price)', [1.0825, 2]); ->get()
Ordering
$rows = DB::table('orders') ->ordering($data, ['order_id' => 'desc']); ->groupByRaw('price * ? as price_with_tax', [1.0825]); ->get()
Timestamps
Set the timestamps 'created_atandupdated_atfor insert andupdated_at` for update
$result = DB::table('orders') ->timestamps() ->insert($values)
$result = DB::table('orders') ->timestamps() ->update($values)
$result = DB::table('orders') ->timestamps(false) ->update($values)
<select name="sent_by" class="form-control" data-select data-select-fetch="{{ url('search/employee') }}" data-fetch-method="post" data-selected="2" label-field="name" value-field="employe_id"> <option value="">Search Employee</option> </select>
<select name="sent_by" tokenizer> <option value="">Search Employee</option> </select>
<select name="sent_by" data-select-ajax="{{ url('search/employee') }}"> <option value="">Search Employee</option> </select>
<select name="sent_by" data-select-image="{{ url('search/employee') }}"> <option value="">Search Employee</option> </select>
<select name="countries" data-select-target="#states" data-method="get" data-url="{{ url('search/states/:id') }}"> <option value="">Search Country</option> </select> <select name="states" id="states" > <option value="">Search State</option> </select>
:idwill be replaced with country id to get states list
Attributes
Custom attributes used in controllers to configure view, resources and layouts
Avaliable attributes
use Diviky\Bright\Attributes\View;
use Diviky\Bright\Attributes\ViewPaths;
use Diviky\Bright\Attributes\ViewNamespace;
use Diviky\Bright\Attributes\Resource;
use Diviky\Bright\Attributes\ResourceCollection;
#[View('name', 'layout')]
#[View('none')] //No view will be rendered
#[ViewPaths([__DIR__.'views'])]
#[ViewNamespace("package")]
#[Resource('Resources/PostResource', 'post')]
#[ResourceCollection('Resources/PostResource', 'posts')]
#[View('name', 'layout')] // by default method name has view name public function index(Request $request) { $data = $request->all(); $rows = Post::filter($data) ->ordering($data, ['ordering' => 'asc']) ->paginate(); return [ 'rows' => $rows, ]; }
JS files
License
The MIT License (MIT). Please see License File for more information.
统计信息
- 总下载量: 28.36k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 1
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-11-02