request = $request; } /** * @inheritDoc */ public function apply($model, RepositoryInterface $repository) { if ($name = $this->request->get('name', false)) { $model = $model->where('name', 'like', "%{$name}%"); } if ($this->request->filled('lat') && $this->request->filled('lng')) { $lat = $this->request->get('lat'); $lng = $this->request->get('lng'); $model = $model->select(['*', DB::raw("ACOS(SIN(({$lat} * 3.1415) / 180 ) *SIN((lat* 3.1415) / 180 ) + COS(({$lat} * 3.1415) / 180 ) * COS((lat* 3.1415) / 180 ) *COS(({$lng} * 3.1415) / 180 - (lng* 3.1415) / 180 ) ) * 6380 as distance")])->orderBy('distance', 'asc'); } //管理员 if (is_admin_login()) { $admin = login_admin(); switch ($admin->type) { case Role::Merchants: $model = $model->where('admin_id', $admin->id); break; case Role::Invest: case Role::Agency: $ids = Device::query()->where('merchant_id', $admin->id)->orWhere('agency_id', $admin->id)->orWhere('invest_id', $admin->id)->pluck('shop_id')->toArray(); $model = $model->where(function ($query) use ($ids, $admin) { return $query->whereIn('id', $ids)->orWhere('admin_id', $admin->id); }); break; } } return parent::apply($model, $repository); } }