Содержание
скрыть
Индекс для поля title
Создадим миграцию:
php artisan make:migration alter_table_post_add_title_index --table=posts
Изменим созданный файл:
public function up() { Schema::table('posts', function (Blueprint $table) { $table->index('title'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('posts', function (Blueprint $table) { $table->dropIndex('title'); }); }
И выполним миграцию:
php artisan migrate
Контроллер
Создадим рут:
Route::get('/search', 'SearchController@index')->name('search');
Создадим контроллер:
php artisan make:controller SearchController
Вынесем навбар в отдельный файл resources/views/layouts/navbar.blade.php и подключим его в файлах resources/views/layouts/layout.blade.php , resources/views/layouts/category_layout.blade.php .
@include('layouts.navbar')
В контроллер запишем:
class SearchController extends Controller { public function index(Request $request) { $request->validate([ 's' => 'required', ]); $s = $request->s; $posts = Post::where('title', 'LIKE', "%{$s}%")->with('category')->paginate(2); return view('posts.search', compact('posts', 's')); } }
Scope
Добавим в app/Models/Post.php скоуп:
public function scopeLike($query, $s) { return $query->where('title', 'LIKE', "%{$s}%"); }
И вызовем его в app/Http/Controllers/SearchController.php :
$posts = Post::like($s)->with('category')->paginate(2);
like($s) — это наш scope.
Вью
Создадим страницу resources/views/posts/search.blade.php, в которую скопируем все из resources/views/posts/index.blade.php . И адаптируем ее.