Voici mon code, il permet de faire une recherche par mot clé et il fonctionne bien lorsqu'on recherche sur plusieurs mots "OR". Cependant, je veux rendre les résultats plus pertinents. Je voudrais que les résultats soient triés par le nombre de mots recherchés qui correspondent. Par exemple : les deux mots entrés dans une recherche sont "bleu" et "rouge". Je voudrais que les enregistrements qui contiennent "bleu" ET "rouge" soient les premiers à être triés. Voici mon code 'controller' actuel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
public function search()
    {
        $data = [
            'title'=> $description = 'Recherche sur '.config('app.name'),
            'description'=> $description,
            'heading'=> config('app.name'),
        ];
 
        $q = request()->input('q');
 
        $nonrelevantwords = [' un ',' en ',' de ',' avec ',' des ',' à ',' dans ',' au ',' aux ',' du ',' entre ',' par ',' pour ',' sans ',' sous ',' dessous ',' dessous',' sur ',' le ',' les ',' la ',' dessus ',' dessus','le ','les ','la '];
        $q = str_replace($nonrelevantwords,' ',$q);
 
        $words = explode(' ', $q);
 
        $query = Product::query();
 
        foreach ($words as $word) {
            $query->orWhere('title','like',"%$word%")
                ->orWhere('subtitle','like',"%$word%")
                ->orWhere('description','like',"%$word%");
        }
 
        $products = $query->paginate();
 
        return view('products.search', $data)->with('products', $products);
    }
Est-ce que vous pouvez m'aider s'il vous plaît ?