22. Поиск по статьям

Индекс для поля 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 . И адаптируем ее.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии