分类自动完成

This commit is contained in:
TL 2022-07-13 10:30:30 +08:00
parent cfe1e6d987
commit 6beb14b25d
2 changed files with 28 additions and 6 deletions

View File

@ -4,6 +4,7 @@ namespace Beike\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasOne;
class CategoryPath extends Model class CategoryPath extends Model
{ {
@ -14,4 +15,14 @@ class CategoryPath extends Model
'path_id', 'path_id',
'level', 'level',
]; ];
public function category(): HasOne
{
return $this->hasOne(Category::class, 'id', 'category_id');
}
public function pathCategory(): HasOne
{
return $this->hasOne(Category::class, 'id', 'path_id');
}
} }

View File

@ -64,16 +64,27 @@ class CategoryRepo
public static function autocomplete($name) public static function autocomplete($name)
{ {
$categories = Category::query()->with('description') $categories = Category::query()->with('paths.pathCategory.description')
->whereHas('description', function ($query) use ($name) { ->whereHas('paths', function ($query) use ($name) {
$query->where('name', 'like', "{$name}%"); $query->whereHas('pathCategory', function ($query) use ($name) {
})->limit(10)->get(); $query->whereHas('description', function ($query) use ($name) {
$query->where('name', 'like', "{$name}%");
});
});
})
->limit(10)->get();
$results = []; $results = [];
foreach ($categories as $category) { foreach ($categories as $category) {
$pathName = '';
foreach ($category->paths->sortBy('level') as $path) {
if ($pathName) {
$pathName .= ' > ';
}
$pathName .= $path->pathCategory->description->name;
}
$results[] = [ $results[] = [
'id' => $category->id, 'id' => $category->id,
'name' => $category->description->name, 'name' => $pathName,
'image' => $category->image,
]; ];
} }
return $results; return $results;