من یک Backend Developer هستم که دوست دارم توی مسیر یادگیری و تجربه رشد کنم. ساختن ، همیشه برام هیجانانگیزه و تلاش میکنم هر روز چیز جدیدی یاد بگیرم 🌱
ایجاد جستجو زنده (ایجکس) با Vue و لاراول

به شخصه خیلی دنبال همچین جستجویی گشتم و تو رفرنس های فارسی چیز به درد بخوری پیدا نکردم تا این که به پکیج spatie/laravel-searchable رسیدم کار باهاش خیلی اسونه و فقط کافیه مدلی که میخوایم جستجو بشه تریتشو یوز کنیم
بریم سر اصل مطلب ابتدا پکیج spatie/laravel-searchable را با دستور زیر نصب کنید:
composer require spatie/laravel-searchableبعد از نصب داخل مدل مورد نظرتون برید :
<?phpnamespace App;use Spatie\Searchable\Searchable;
use Spatie\Searchable\SearchResult;
use Illuminate\Database\Eloquent\Model;class Product extends Model implements Searchable
{
public function getSearchResult(): SearchResult
{ $url = $this->path();
return new SearchResult($this, $this->title, $url);
} public function path(){ return $this->slug; }
}
خب همانطور که میبینید ما از implements Searchable استفاده کردیم و یک متد هم به صورت اتوماتیک برای ما اضافه میشه .
حالا نیاز به یک rote داریم که اطلاعات باهاش به کنترلر بفرستیم
Route::get('product/search', 'SearchController@index');بعد از ایجاد مسیر ، کنترلر مربوطه هم با دستور زیر میسازیم:
php artisan make:controller SearchController
بعد از ایجاد کنترلر کد های زیر را در ان قرار میدهیم
<?php
namespace App\Http\Controllers;
use App\Product;
use Spatie\Searchable\Search;
use Illuminate\Http\Request;
class SearchController extends Controller{
public function index(Request $request)
{
$results = (new Search())
//قسمت هایی که میخوایم جستجو بشن
->registerModel(Product::class, ['title', 'body'])
->search($request->input('query'));
return response()->json($results);
}
}خب تا اینجای کار قسمت بکند ما اماده شده و نیاز به ایجاد قسمت فراند داریم که با vue این قسمت میسازیم:
<template>
<div>
<input type="text" placeholder="Search" v-model="query">
<ul v-if="results.length > 0 && query">
<li v-for="result in results.slice(0,10)" :key="result.id">
<a :href="result.url">
<div v-text="result.title"></div>
</a>
</li>
</ul>
</div>
</template>
export default { data() { return { query: "", results: [] }; }, watch: { query(after, before) { this.searchMembers(); } }, methods: { searchMembers() { axios.get('products/search', { params: { query: this.query } }) .then(response => this.results = response.data) .catch(error => {}); } } }این هم از قسمت ویو جستجو . حالا میتونید این کامپوننت رو هر جای سایتتون که میخواید فراخوانی کنید
مطلبی دیگر از این انتشارات
لاراول دیباگبار چیست؟ (به همراه آموزش ویدیویی?) (Laravel debugbar)
مطلبی دیگر از این انتشارات
حالا چرا لاراول؟ ـ یک شاهد کنسولی
مطلبی دیگر از این انتشارات
چرایی و چگونگی استفاده از Query Scope در لاراول