vd/app/Domains/Virtual/Http/Controllers/FetchController.php
2018-12-18 16:46:51 +08:00

86 lines
2.1 KiB
PHP

<?php
namespace App\Domains\Virtual\Http\Controllers;
use App\Core\Controller;
use Illuminate\Http\Request;
use App\Domains\Virtual\Repositories\CompanyRepository;
use App\Domains\Virtual\Repositories\PackageRepository;
class FetchController extends Controller
{
protected $request;
/**
* 构造函数,自动注入.
*/
public function __construct(Request $request)
{
$this->request = $request;
}
/**
* 使用名称查找企业
*
* @return void
*/
public function companies(CompanyRepository $companyRepository)
{
return res($this->search($companyRepository), '', 201);
}
/**
* 使用名称查找套餐
*
* @return void
*/
public function packages(PackageRepository $packageRepository)
{
return res($this->search($packageRepository), '', 201);
}
/**
* 统一搜索归并
*
* @param [type] $repository
* @param string $field
* @param integer $limit
* @param string $primaryKey
* @return void
*/
protected function search($repository, $field = 'name', $primaryKey = 'id')
{
$search = $this->request->get('search');
$limit = $this->request->get('limit', 0);
$results = $repository->select([$primaryKey, $field])->get();
if ($search) {
$results = $results->filter(function ($item) use ($search, $field) {
$result = true;
if (strpos($item[$field], $search) === false) {
$result = false;
}
if (strpos(pinyin_abbr($item[$field]), $search) === false) {
$result = false;
}
if (strpos(implode('', pinyin($item[$field])), $search) === false) {
$result = false;
}
return $result;
});
}
$sorted = $results->sortBy($field)->values()->all();
if ($limit) {
return array_slice($sorted, 0, $limit);
}
return $sorted;
}
}