You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xshop/app/Http/Controllers/Api/MorphController.php

63 lines
1.9 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\Clip;
use App\Models\Gallery;
use App\Models\Group;
use App\Models\Post;
use App\Models\Product;
use Illuminate\Http\Request;
class MorphController extends Controller
{
public $limit = 5;
//
public function search(Request $request)
{
if (auth()->check() ){
return abort(403);
}
$morph = $request->input('morph', Product::class);
$q = '%' . $request->input('q') . '%';
switch ($morph) {
case Product::class:
$q = Product::where('name', 'LIKE', $q)
->orWhere('description', 'LIKE', $q);
break;
case Post::class:
$q = Post::where('title', 'LIKE', $q)
->orWhere('subtitle', 'LIKE', $q)
->orWhere('body', 'LIKE', $q);
break;
case Group::class:
$q = Group::where('name', 'LIKE', $q)
->orWhere('subtitle', 'LIKE', $q)
->orWhere('description', 'LIKE', $q);
break;
case Category::class:
$q = Category::where('name', 'LIKE', $q)
->orWhere('subtitle', 'LIKE', $q)
->orWhere('description', 'LIKE', $q);
break;
case Clip::class:
$q = Clip::where('title', 'LIKE', $q)
->orWhere('body', 'LIKE', $q);
break;
case Gallery::class:
$q = Gallery::where('title', 'LIKE', $q)
->orWhere('description', 'LIKE', $q);
break;
default:
return ['OK' => false, 'error' => __("Invalid morph")];
}
return ['OK' => true, 'data' => $q->orderByDesc('updated_at')->limit($this->limit)->get()];
}
}