mosamy / helpers
2.4.3
2024-07-20 23:49 UTC
Requires
- php: >=8.1
README
laravel 应用程序的常用辅助函数和快捷方式
安装
composer require mosamy/helpers
php artisan vendor:publish --provider="Mosamy\Helpers\HelpersServiceProvider" --tag="config"
用法
作用域特性
此特性提供了一些模型辅助函数。
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Posts extends Model
{
use \Mosamy\Helpers\Traits\Scopes;
}
然后你可以使用这些作用域。whenWhere()
$posts = Posts::whenWhere('type')->get();
//This excatly equivalent to:
$posts = Posts::when(request('type'), fn( $post) => $post->where('type', request('type')))->get();
$posts = Posts::whenWhere('post_type', request('type')))->get();
//This excatly equivalent to:
$posts = Posts::when(request('type'), fn( $post) => $post->where('post_type', request('type')))->get();
$posts = Posts::whenWhere('post_type', $condition, request('type'))->get();
//This excatly equivalent to:
$posts = Posts::when($condition, fn($post) => $post->where('post_type', request('type')))->get();
whenLike()
$posts = Posts::whenLike('type')->get();
//This excatly equivalent to:
$posts = Posts::when(request('type'), fn( $post) => $post->where('type', 'like', '%'.request('type').'%'))->get();
$posts = Posts::whenLike('post_type', request('type'))->get();
//This excatly equivalent to:
$posts = Posts::when(request('type'), fn( $post) => $post->where('post_type', 'like', '%'.request('type').'%'))->get();
$posts = Posts::whenLike('post_type', $condition, request('type')))->get();
//This excatly equivalent to:
$posts = Posts::when($condition, fn( $post) => $post->where('post_type', 'like', '%'.request('type').'%'))->get();
whenNotLike()
whenLike() 的对立面
whenWhereIn()
$posts = Posts::whenWhereIn('type')->get();
//This excatly equivalent to:
$posts = Posts::when(request('type'), fn( $post) => $post->whereIn('type', request('type')))->get();
$posts = Posts::whenWhere('post_type', request('type'))->get();
//This excatly equivalent to:
$posts = Posts::when(request('type'), fn( $post) => $post->whereIn('post_type', request('type')))->get();
$posts = Posts::whenWhere('post_type', $condition, request('type'))->get();
//This excatly equivalent to:
$posts = Posts::when($condition, fn( $post) => $post->whereIn('post_type', request('type')))->get();
whenWhereNotIn()
whenWhereIn() 的对立面
whenWhereRelation()
$posts = Posts::whenWhereRelation('category', 'name')->get();
//This excatly equivalent to:
$posts = Posts::when(request('name'), fn( $post) => $post->whereRelation('category', 'name', request('name')))->get();
$posts = Posts::whenWhereRelation('category', 'category_name', request('name'))->get();
//This excatly equivalent to:
$posts = Posts::when(request('name'), fn( $post) => $post->whereRelation('category', 'category_name', request('name')))->get();
$posts = Posts::whenWhereRelation('category', 'category_name', $condition, request('name'))->get();
//This excatly equivalent to:
$posts = Posts::when($condition, fn( $post) => $post->whereRelation('category', 'category_name', request('name')))->get();
whenWhereRelationIn()
$posts = Posts::whenWhereRelationIn('category', 'name')->get();
//This excatly equivalent to:
$posts = Posts::when(request('name'), fn( $post) =>
$post->whereHas('category', fn($category) => $category->whereIn('name', request('name')))
)->get();
$posts = Posts::whenWhereRelationIn('category', 'category_name', request('name'))->get();
//This excatly equivalent to:
$posts = Posts::when(request('name'), fn( $post) =>
$post->whereHas('category', fn($category) => $category->whereIn('category_name', request('name')))
)->get();
$posts = Posts::whenWhereRelationIn('category', 'category_name', $condition, request('name'))->get();
//This excatly equivalent to:
$posts = Posts::when( $condition, fn( $post) =>
$post->whereHas('category', fn($category) => $category->whereIn('category_name', request('name')))
)->get();
findInSet()
$posts = Posts::findInSet('tags', ['keyword1', 'keyword2', 'keyword3'])->get();
从 - 到
// find between two dates, when datetime = true it will convert dates to datetime
$posts = Posts::fromTo($from, $to, $column, $datetime);
// find between two dates if ($to) is exists or whereDate $column = $from
$posts = Posts::scopeFromOrTo($from, $to, $column, $datetime);
search()
$posts = Posts::search($keyword, ['name', 'description', 'notes'])->get();
//This excatly equivalent to:
$posts = Posts::when($keyword, fn($post) =>
$post->where(function($post){
foreach (['name', 'description', 'notes'] as $attribute) {
$post->orWhere($attribute,'like','%'.$keyword.'%');
}
});
)->get();
你可以在你的模型中设置默认搜索属性。
class Posts extends Model
{
use \Mosamy\Helpers\Traits\Scopes;
const SearchableAttributes = ['name', 'description', 'notes'];
}
$posts = Posts::search($keyword)->get();
WithFilters 特性 (Livewire 3)
如果你使用 livewire,你可能需要使用一些带有查询字符串的过滤器进行搜索,WithFilters 特性可以使代码更简洁,而不必编写杂乱的代码!
use App\Models\Product;
use Mosamy\Helpers\Traits\WithFilters;
use Livewire\Component;
class Products extends Component
{
use WithFilters;
// set your filters in $filter proberty as array and the value will consider the default filter value
public $filters = [
'search' => null,
'category_id' => null,
'sortby' => 'recent',
'brands' => []
];
public $products;
public function mount()
{
$this->setFilter('sortby', 'low-price'); //set or change the default value of specific filter
$this->products = Product::whereStatus('active')
->where('category_id', $this->filter('category_id')) //get search value by using filter() function
->whereIn('brand_id', $this->filter('brands'))
->get();
}
}
<input type="text" wire:model.live="filters.search">
有一些规则和辅助函数,你可以查看源代码中的文件。
WithValidator 特性
与返回包含错误数组的 "Validation Error!" 消息的 API 响应很有用
ComponentUtilities 特性
与 livewire 组件配合使用,具有一些函数:redirectNotify:带有通知的重定向 navigate:通过 SPA 跳转到页面 redirectWithSuccessTo:带有通知通过 SPA 跳转到页面 validateForm:带有滚动到错误位置的表单验证 resetErrors:重置错误包和验证 rename:用于重命名集合中的键