搜索功能Laravel 5.2使用LIKE

时间:2016-11-02 14:00:46

标签: php laravel-5.2

最近我一直在学习lavvel,而且我已经对laravel中的基本功能有了理解,现在我希望能够从我的数据库中搜索记录,而我似乎无法弄清楚如何去做,

这是我为它制作的控制器功能

 public function search()
{
    //searching on producten in the producten database table

    $producten = DB::table('producten')
                ->where('naam', 'LIKE', '%$query%')
                ->get();
}

这就是My View的样子

 {!! Form::open(['route' => 'producten.index', 'method' => 'GET', 'class' => 'search']) !!}

        {!! Form::text('naam')!!}

     {!! Form::close() !!}

如果我在浏览器中查看视图,并在文本框中输入产品名称,则网址会更改为producten?naam = ProductNaam,但屏幕上没有显示任何不同,我希望这是足够的信息来帮助我,请告诉我是否需要在问题中添加任何内容。

4 个答案:

答案 0 :(得分:2)

您的观点是正确的,但您的控制器并不接受任何内容。

您目前正在搜索名称中包含'查询'的产品。在里面。

因此,您必须在搜索方法中接受请求。

像这样:

public function search(Request $request)

$request->naam会为您提供在文字字段中输入的值。显然,您仍然需要验证该值。

我还建议过滤模型,你的代码会更具可读性。

 Product::where('naam', 'LIKE', "%$request->naam%")->get();

您应该阅读此页面,这将使您更好地了解您的问题 https://laravel.com/docs/5.3/requests

答案 1 :(得分:0)

只需修改引号:->where('naam', 'LIKE', "%$query%")

  • 单引号:其内容被视为字符串文字
  • 双引号:允许使用特殊字符,例如$,\ n,\ t ...

更多信息can be found in the docs

答案 2 :(得分:0)

将以下代码添加到您雄辩的用户模型

public function scopeSearchByKeyword($query, $keyword)
    {
        if ($keyword!='') {
            $query->where(function ($query) use ($keyword) {
                $query->where("name", "LIKE","%$keyword%")
                    ->orWhere("email", "LIKE", "%$keyword%")
                    ->orWhere("blood_group", "LIKE", "%$keyword%")
                    ->orWhere("phone", "LIKE", "%$keyword%");
            });
        }
        return $query;
    }

然后你可以轻松做到

$keyword = Input::get('keyword', '');
$users = User::SearchByKeyword($keyword)->get();

答案 3 :(得分:0)

您的控制器功能应为:

public function search()
{
    //searching on producten in the producten database table

    $query = request()->get('naam');

    $producten = DB::table('producten')
                ->where('naam', 'LIKE', "%$query%")
                ->get();

    // pass the `$producten` result to your search view.
}