49190


データはSearchした時だけ表示出して欲しいんですが、今の場合はSearchしなくてもデータをページで見えます。この問題をどうやって解決できるか、混乱しています。

Routeのコードは

[code]

    Route::get("/", "PagesController@welcome");
    
    Route::post("/", "PagesController@search")->name('search.route');
    
[/code]

Controllerのコードは

[code]

    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!");
    }
    
[/code]

それでViewページは

[code]

    <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> 
    
[/code]

ここで何を間違っていますが、分かりません。Any ideaはよろしくお願います。


CC BY-SA 4.0
2018-10-11T07:40:39.480
49184
2018-10-11T09:46:26.280
2018-10-11T07:56:28.580
30379
30379
question
php mysql laravel
Search Formをデータベースに接続して、データをリターンする


laravelは経験がないのですが、コードの雰囲気的に以下のように修正すれば行ける気がします。  
hereの部分を以下のように書き換えてみたらどうでしょうか？

[code]

    public function search(Request $request)
    {
        $q = $request->q;
        if ($q !== null && trim($q) !== ""){//here
    
            $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);
            }
    
        }
    
        $estates = array();//here
        return view("welcome", compact('estates'))->withMessage("No Found!");//here
    }
    
[/code]

■追記  
get時はestatesに空の配列を指定することで、空のデータを表示するようになると思います。

[code]

    public function welcome()
    {
    
        $estates = array();//here 
    
        $data['estates'] = $estates; 
        return view('welcome', $data);
    }
    
[/code]


CC BY-SA 4.0
2018-10-11T08:53:29.790
49190
2018-10-11T09:46:26.280
2018-10-11T09:46:26.280
17014
17014
49184
answer