mosamy/helpers

在所有项目中都需要的大部分功能

2.4.3 2024-07-20 23:49 UTC

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:用于重命名集合中的键