Im Grunde mache ich ein Projekt für das College und das einzige, was in meinem Projekt fehlt, ist ein funktionierendes Suchformular, aber ich weiß nicht, wie ich es machen soll. Alle meine Produkte werden erstellt und in die Datenbank eingefügt.

Meine Routen:

Route::get('/', [
    'uses' => 'ProductsController@getIndex',
    'as'=> 'product.index'
 ] //tenho de meter um . porque nao é uma diretoria global, index ta dentro 
duma pasta shop
 );

Mein Tisch:

  Schema::create('products', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamps();
        $table->string("imagePath");
        $table->string("title");
        $table->text("description");
        $table->integer("price");
    });

Meine Formularstruktur:

   <form action="" method="post" class="navbar-form navbar-left " role = "search">
            <div class="form-group">
                <input type="text"  class="form-control" placeholder="Search">
            </div>
            <button type="submit" class="btn btn-default">Search</button>
        </form>

Mein Produktcontroller:

   public function getIndex(){
    $products = Products::all();
    return view('shop.index', ['products' => $products]);
}

Ich habe viele Tutorials gesehen, wie man eines macht, aber ich kann es nicht dazu bringen, die zu filtern, die ich habe, zum Beispiel, wenn ich 3 Stiefel und 5 Schuhe im Shop habe, wenn ich "boot" in die Suche schreibe Ich möchte nur, dass die 3 Stiefel erscheinen

0
Diogo Cruz 18 Jän. 2019 im 22:31

3 Antworten

Beste Antwort

Ihr HTML wäre

<form action="{{ route('product.search') }}" method="post" class="navbar-form navbar-left " role = "search">
    @csrf
    <div class="form-group">
        <input type="text"  class="form-control" name="search" placeholder="Search">
    </div>
    <button type="submit" class="btn btn-default">Search</button>
</form>

In Ihrer searchProduct Funktion

Für eine ähnliche Abfrage, bei der im Titel gesucht werden kann und wenn ein Schlüsselwort vorhanden ist, werden alle Produkte zurückgegeben, die denselben Titel haben, nach dem Sie suchen

public function searchProducts(Request $request){
    $products = Product::where('title', 'like', '%'.$request->search.'%')->get();
    return view('shop.index', ['products' => $products]);
}

Für genau das gleiche Titelergebnis

public function searchProducts(Request $request){
    $products = Product::where('title',$request->search)->get();
    return view('shop.index', ['products' => $products]);
}
0
Shaielndra Gupta 18 Jän. 2019 im 20:50

Es gibt viele verschiedene Möglichkeiten, sich einer Suche zu nähern ... von einfach bis sehr komplex, aber eine grundlegende Methode wäre, Ihre Titel- und Beschreibungsfelder nach einem Schlüsselwort wie "boot" zu durchsuchen.

Sie möchten ein paar Dinge hinzufügen ... Fügen Sie zunächst eine neue Route hinzu, um die Suchanforderung zu bearbeiten:

Route::post('/results', [
  'uses' => 'ProductsController@searchProducts', 
  'as'=>'product.search'
]);

Fügen Sie als Nächstes Ihrer HTML-Eingabe einen Namen hinzu, z. B. 'Schlüsselwort' zusammen mit der Blade-Verknüpfung für das CSRF-Token-Feld:

<form action="/results" method="post" class="navbar-form navbar-left " role = "search">
  @csrf
  <div class="form-group">
    <input type="text"  class="form-control" placeholder="Search" name="keyword">
  </div>
  <button type="submit" class="btn btn-default">Search</button>
</form>

Fügen Sie dann Ihrem Controller eine Funktion hinzu, um die Abfrage zu bearbeiten:

public function searchProducts(Request $request){
  $results = Product::where('title', 'like', '%'.$request->search.'%')
    ->orWhere('description', 'like', '%'.$request->search.'%')
    ->orderBy('title', 'desc')
    ->get();

  return view('search_results', ['results'=>$results, 'keyword'=>$request->keyword]);
}

Erstellen Sie abschließend eine neue Datei mit dem Namen search_results.blade.php und legen Sie sie in Ihrem Ansichtsverzeichnis ab. Dies wird verwendet, um die Suchergebnisse dem Benutzer anzuzeigen.

<h2>Search Results for {{$keyword}}</h4>
<table>
    <thead>
        <tr>
            <th>Product</th>
            <th>Description</th>
            <th>Price</td>
        </tr>
    </thead>
    <tbody>
        @forelse($results as $result)
            <tr>
                <td>{{$result->title}}</td>
                <td>{{$result->description}}</td>
                <td>{{$result->price}}</td>
            </tr>
        @empty
            <tr>
                <td colspan="3">
                    No Products Found
                </td>
            </tr>
        @endforelse
    </tbody>
</table>

Mit dieser Grundlage können Sie wirklich wild werden und Filteroptionen, Sortierung, Rangfolge und mehr hinzufügen. Hoffe das hilft dir weiterzumachen!

0
AndyChern 18 Jän. 2019 im 20:52

Du kannst das

html

       <form action="/search" method='post' class="navbar-form navbar-left " role = "search">
                <div class="form-group">
                    <input type="text"  class="form-control" placeholder="Search" name="search">
                </div>
                <button type="submit" class="btn btn-default">Search</button>
            </form>


    PHP

    public function search(Request $request)
    {
        $products = Product::where('title', 'LIKE', '%'.request->search.'%')->get();

        return view('search', ['products' => $products]);
    }

Ändern Sie nur die Ansicht, die Sie zurückgeben möchten, und erstellen Sie sie auch in einer route / web.php.

-1
Joaquin 18 Jän. 2019 im 19:50