如何将搜索表单连接到数据库并在Laravel上检索数据

时间:2018-10-11 06:19:50

标签: php mysql database laravel search-form

我正在尝试将搜索表单连接到数据库,并从那里检索数据。但是出了点问题。我的管制员或我的路线...但我无法弄清楚。

问题在于它直接显示了没有搜索的数据。 我想在搜索时查看数据。还要尝试搜索,这即将到来:

Collection {#221 ▼
  #items: []
}

我的看法在这里:

<form action="{{URL::to('welcome')}}" method="post" role="search" class="searchbox">
    {{csrf_field()}}
    <input type="text" name="q" class="search" placeholder="町, 地域, 会社名, 物件名">
    <input type="submit" name="submit" class="submit" value="search">
  </form>
  @if(isset($details))
      <p> here is the results <b>{{$query}}</b> are : </p>
    @endif
<table cellspacing='0'>
  <thead>
  <tr>
    <th>会社名</th>
    <th>物件名</th>
    <th>住所</th>
    <th>販売価格</th>
    <th>専有面積</th>
    <th>間取り</th>
    <th>竣工時期</th>
    <th>入居時期</th>
  </tr>
  <thead>
  <tbody>
  @foreach($estates as $estate)
    <tr class="even">
      <td>{{$estate->company_name}}</td>
      <td><a href="{{json_decode($estate->link)}}" target="_blank">{{$estate->name}}</a><br/></td>
      <td>{{$estate->address}}</td>
      <td>{{$estate->price}}</td>
      <td>{{$estate->extend}}</td>
      <td>{{$estate->rooms}}</td>
      <td>{{$estate->old}}</td>
      <td>{{$estate->entery}}</td>
    </tr>
  @endforeach
  </tbody>
</table> 

这也是控制器和我的路线。 我在这干什么?

public function welcome()
{

    $estates = Estates::orderBy('price')->get(); 

    $data['estates'] = $estates; 
    return view('welcome', $data);

}

public function search(Request $request)
{
    $q = $request->q;
    if ($q != " "){

        $estates = \DB::table('estates')->where("name","LIKE", "%" . $q . "%")
            ->orWhere("address","LIKE", "%" . $q . "%")
            ->get();

        dd($estates);

        if(count($estates) > 0){
            return view("welcome", compact('estates'))->withQuery($q);
        }

    }

    return view("welcome")->withMessage("No Found!");
}

这是路线:

Route::get("/", "PagesController@welcome");

Route::post("/", "PagesController@search")->name('search.route');

我不知道。另外,第一个控制器welcome无需检索表单即可顺利检索数据!但是我希望它在我尝试搜索时运行。有什么帮助吗?谢谢!

2 个答案:

答案 0 :(得分:0)

在这里您也可以这样做

像这样改变路线

Route::post("/", "PagesController@search")->name('routeName');

并像这样更改表单操作

<form action="{{route('routeName')}}" method="post" role="search" class="searchbox">

或编辑您的代码,并将网址传递给引号中的值

<form action="{{URL::to('welcome')}}" method="post" role="search" class="searchbox">

有关更多信息,请检查此Laravel Routes

答案 1 :(得分:0)

将表单操作更改为

<form action="{{ route('search.route') }}" method="post" role="search" class="searchbox">

将路线更改为

Route::post("/", "PagesController@search")->name('search.route');

在您的PagesController顶部添加use Illuminate\Http\Request;并将控制器方法更改为

public function search(Request $request)
{
    $q = $request->q;
    if ($q != " "){

        $estates = \DB::table('estates')->where("name","LIKE", "%" . $q . "%")
            ->orWhere("address","LIKE", "%" . $q . "%")
            ->get();

        dd($estates);

        if(count($estates) > 0){
            return view("welcome", compact('estates'))->withQuery($q);
        }

    }

    return view("welcome")->withMessage("No Found!");
}