
最佳答案

讨论数量:
这样查舒服一点
$data=app(App\Services\Search\Db\MainService::class)->startFetchData();
//todo
MainService
<?php namespace App\Services\Search\Db;
use App\Services\Search\Db\Filter\MainFilter;
use DB;
class MainService
{
protected $mainFilter;
public function __construct(MainFilter $mainFilter)
{
$this->mainFilter = $mainFilter;
}
public function startFetchData()
{
return DB::table('xxx')->where(function ($query){
$this->mainFilter->apply($query);
})->get();
}
}
QueryFilter
<?php namespace App\Services\Search\Db\Filter;
use Illuminate\Http\Request;
use Illuminate\Database\Query\Builder;
abstract class QueryFilter
{
protected $request;
protected $builder;
public function __construct(Request $request)
{
$this->request = $request;
}
public function apply(Builder $builder)
{
$this->builder = $builder;
foreach ($this->filters() as $name => $value) {
if (method_exists($this, $name)) {
call_user_func_array([$this, $name],[$value]);
}
}
return $this->builder;
}
public function filters()
{
return $this->request->all();
}
}
MainFilter
<?php
namespace App\Services\Search\Db\Filter;
class MainFilter extends QueryFilter
{
public function status($status)
{
return $this->builder->where('status',$status);
}
}