zlt / lara-calls
laravel 的一系列实用方法
v0.0.2.5
2021-11-20 04:58 UTC
Requires
- php: ^7.3|^8.0
- laravel/framework: ^v8.0.0
README
目录
安装
要求
- php : ^7.3 或 ^8.0
- laravel : ^8.0
通过 composer 安装
composer require zlt/lara-calls
发布配置文件。
php artisan vendor:publish --provider="Zlt\LaraCalls\LaraCallsServiceProvider"
配置文件将包含
return [ /* * Define your eloquent builder class so that you can use custom Eloquent macros provided by package. */ 'builder' => \Illuminate\Database\Eloquent\Builder::class, /* * You may customize which macros you don't want to use. * Only macros provided below will not be registered. * Available Macros are 'onlyValues','pluckMultiple','updateOrCreateWhen','sortInValue','sortInValueDesc','groupAndSortBy','groupAndSortByDesc','calc_exec_time','validation'. */ 'exclude_macros' => [], ];
注意:如果您已经发布了配置,请更新 'laravel-macros' 配置中的 'macros' 以使用最新的方法。
可用方法
收集宏
-
OnlyValues
此方法可用于
Collection
实例。这将返回仅有的值,并将丢弃第一级数组键。$collection = collect([ [ 'a' => 123, 'b' => 12, ], [ 'a' => 12, 'b' => 31, ] ]); dd($collection->onlyValues()->toArray()); // [ [123,12],[12,31] ];
-
PluckMultiple
此方法可用于
Collection
实例。此方法类似于 Eloquent Builder 上的get()
。您可以提取您想要的列及其值。您还可以提取嵌套属性(如果存在)。// $collection->pluckMultiple(array $keys); $collection = collect([ [ 'a' => 123, 'b' => 12, ], [ 'a' => 12, 'b' => 31, 'c' => 32, ] ]); dd($collection->pluckMultiple(['a', 'b'])); /* Illuminate\Support\Collection { all: [ [ "a" => 123, "b" => 12,], [ "a" => 12, "b" => 31,], ], } */ $collection = collect([ [ 'a' => 123, 'b' => 12, 'c' => [ 'x' => 1, ] ], [ 'a' => 12, 'b' => 31, 'c' => [ 'x' => 2, ], ] ]); //pluck nested attribute dd($collection->pluckMultiple(['a', 'c.x'])); /* Illuminate\Support\Collection { all: [ [ "a" => 123, "c.x" => 1,], [ "a" => 12, "c.x" => 2,], ], } */
-
SortInValue
此方法将按升序排序特定属性的值。您还可以指定键以排序该属性的值。要按降序排序,请使用
sortInValueDesc
// $collection->sortInValue(string $attributeToSort); // Sometimes you may sort attribute values by key of that attribute values. Then use $collection->sortInValue(string $attributeToSort,string $someKeyOfThatAttribute); $collection = collect([ [ 'a' => [4,5,1,3] ], [ 'a' => [5,6,1,8] ] ]); $collection->sortInValue('a'); /* Illuminate\Support\Collection {#4325 all: [ [ "a" => Illuminate\Support\Collection {#4328 all: [ 2 => 1, 3 => 3, 0 => 4, 1 => 5, ], }, ], [ "a" => Illuminate\Support\Collection {#4322 all: [ 2 => 1, 0 => 5, 1 => 6, 3 => 8, ], }, ], ], } */ $collection = collect([ [ 'a' => [ ['b' => 4], ['b' => 5], ['b' => 1], ['b' => 3]] ], [ 'a' => [ ['b' => 5], ['b' => 2], ['b' => 6], ['b' => 1]] ] ]); $collection->sortInValue('a','b'); // sort 'a' values by 'b' key of 'a' /* Illuminate\Support\Collection {#4348 all: [ [ "a" => Illuminate\Support\Collection {#4347 all: [ 2 => [ "b" => 1, ], 3 => [ "b" => 3, ], 0 => [ "b" => 4, ], 1 => [ "b" => 5, ], ], }, ], [ "a" => Illuminate\Support\Collection {#4346 all: [ 3 => [ "b" => 1, ], 1 => [ "b" => 2, ], 0 => [ "b" => 5, ], 2 => [ "b" => 6, ], ], }, ], ], } */
-
SortInValueDesc
此方法类似于
sortInValue
但按降序排序。 -
GroupAndSortBy
此方法类似于
groupBy
但可以排序返回的集合。您还可以提供回调以按您喜欢的任何方式修改返回的集合。为了按降序排序返回的集合,您可能需要使用groupAndSortByDesc
方法。//$collection->groupAndSortBy(string $attributeKeyToGroup,string $attributeKeyToSortAfterGroup,Closure $closureToAdjustSortedCollection); $collection = collect([ [ 'name' => 'James', 'age' => 20, ], [ 'name' => 'Watson', 'age' => 24, ], [ 'name' => 'James', 'age' => 15, ] ]); dd($collection->groupAndSortBy('name','age')); /* Illuminate\Support\Collection^ {#4321 #items: array:2 [ "James" => Illuminate\Support\Collection^ {#4322 #items: array:2 [ 1 => array:2 [ "name" => "James" "age" => 15 ] 0 => array:2 [ "name" => "James" "age" => 20 ] ] } "Watson" => Illuminate\Support\Collection^ {#4325 #items: array:1 [ 0 => array:2 [ "name" => "Watson" "age" => 24 ] ] } ] } */ $collection = collect([ [ 'name' => 'James', 'age' => 20, ], [ 'name' => 'Watson', 'age' => 24, ], [ 'name' => 'James', 'age' => 15, ] ]); dd($collection->groupAndSortBy('name','age',function($collection){ return $collection->where('age','>=',24); })); // after group and sorted, adjust the sorted collection /* Illuminate\Support\Collection^ {#4313 #items: array:2 [ "James" => Illuminate\Support\Collection^ {#4311 #items: [] } "Watson" => Illuminate\Support\Collection^ {#4309 #items: array:1 [ 0 => array:2 [ "name" => "Watson" "age" => 24 ] ] } ] } */
-
GroupAndSortByDesc
groupAndSortByDesc
方法类似于groupAndSortBy
但返回的集合按降序排序。 -
验证
验证集合并执行后续的
onSuccess
或onError
处理。为了验证,您可以提供 验证规则数组或闭包。如果您提供验证规则,您可以在onError
闭包中提供一个参数,该参数将是\Illuminate\Support\MessageBag
的实例。//$collection->validation(array|Closure $rulesOrClosure)->onSuccess(Closure $closure)->onError(Closure $closure); $collection = collect(['name'=>'John','email'=>'email@mail.com']); $collection->validation(['name'=>'string','email'=>'email']) ->onSuccess(function($collection){ // This will be processed return $collection; })->onError(function($messageBag){ // This will be skipped return $messageBag->toArray(); }); $collection = collect(['name'=>'John','email'=>'email']); $collection->validation(['name'=>'string','email'=>'email']) ->onSuccess(function($collection){ //This step will be skipped. return $collection; })->onError(function($messageBag){ return $messageBag->toArray(); }); // [ "email" => [ "The email must be a valid email address.", ], ] $collection->validation(function($collection){ return false; //Return type must be 'boolean'.Otherwise, it will always return false.}) ->onSuccess(function($collection){ //This step will be skipped. return $collection; })->onError(function(){ //Perform some process after failing validation });
构建宏
-
updateOrCreateWhen
此方法类似于 Laravel 的updateOrCreate
方法,但它接受闭包以确定如果值已存在则是否更新。您可以使用此方法与 Eloquent 一起使用。$food = Food::updateOrCreateWhen(['name' => 'sushi',], [ 'price' => 100, ]); dd($food->price); //100 $food = Food::updateOrCreateWhen(['name' => 'sushi'], [ 'price' => 200 ], function ($oldValue, $newValue) { return true; }); dd($food->price); //200; $food = Food::updateOrCreateWhen(['name' => 'sushi'], [ 'price' => 300 ], function ($oldValue, $newValue) { return false; }); dd($food->price); //200;