首页 > 解决方案 > Laravel8中未显示多个关键字搜索sql语句

问题描述

我正在研究关键字搜索。我成功进行了单个关键字搜索,现在我正在尝试进行多个关键字搜索。

作为半角空格关键字拆分。我从这个网站使用这个中间件

https://qiita.com/logue/items/64c4b5545f76ef17de70

当我 dd() 。我可以看到关键字拆分很好。但是当我搜索功能运行时没有出现sql语句,我可以显示空的结果页面。

你能教我正确的代码吗?

控制器

    public function order_adv()
    {
    $keyword = request('search_adv');

if(!empty($keywords)) {
    foreach ($keywords as $keyword) {
        $products = Product::when('w_m','like','%'.$keyword.'%');
    }
}
     return view('products.result_adv' , compact('products'))
            ->with('i', (request()->input('page', 1) - 1) * 5);
    }
    

WEB.php

Route::get('products/search_adv', [ProductController::class, 'search_adv'])->name('search_adv');
Route::post('products/search_adv', [ProductController::class, 'order_adv'])->name('products.search_adv')->middleware('keyword');

标签: laravel

解决方案


您可以使用 where 回调方法

public function order_adv()
{
    $keywords =explode(' ',request('search_adv'));
     $products = Product::when(count((array)$keywords),function($query)use($keywords){
                $query->where(function($query)use($keywords){
    
                    foreach ($keywords as $keyword) {
                        $query->orWhere('w_m','like','%'.$keyword.'%');
                    }
                });
        })->get();
     return view('products.result_adv' , compact('products'))
            ->with('i', (request()->input('page', 1) - 1) * 5);
}

推荐阅读