2017-10-06 2 views
-2

J'essaie de rechercher dans mon application dans les titres de publication et de poster des balises en même temps, donc j'utilise la méthode de jointure dans ma fonction de recherche.Laravel recherche avec la méthode de jointure

ici est ma forme:

<div class="search"> 
     <form class="form-inline" action="/search" method="GET" role="search"> 
     {{ csrf_field() }} 
     <i class="fa fa-search"></i> 
     <div class="field-toggle"> 
      <input type="text" name="search" class="search-form" autocomplete="off" placeholder="Search..."> 
     </div> 
     <button type="submit" name="button">search</button> 
     </form> 
    </div> 

Et ceci est ma fonction:

public function search() { 

    $search = request('search'); 

    $foods = Food::join('food_ingredient', 'food_ingredient.food_id','=', 'food.id') 
     ->join('ingredients','ingredient.id','=','food_ingredient.ingredient.id') 
     ->where('food.title', 'LIKE', '%' . $search . '%') 
     ->orWhere('ingredient.title', 'LIKE', '%' . $search . '%') //The fix 
     ->orderBy('food.created_at', 'desc') 
     ->groupBy('food.id') 
     ->with('ingredients') 
     ->paginate(8); 

    return view('front.search', compact('foods')); 
} 

Avec ce que je reçois cette erreur:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'food.title' in 'where clause' (SQL: select count(*) as aggregate from foods inner join food_ingredient on food_ingredient . food_id = food . id inner join ingredients on ingredient . id = food_ingredient . ingredient . id where food . title LIKE %papper% or ingredient . title LIKE %papper% group by food . id)

Voici comment est ma base de données:

Foods ->store posts

Ingredients ->Store ingredients

Food_ingredient ->store posts tags

12

Comment puis-je résoudre ce problème? PS: mes noms de poste sont food et le nom de mes tags sont ingredient (juste un nom différent).

Merci.

Répondre

0

Lors de l'utilisation se joindra à vous devez spécifier dans la clause where le nom de la table ainsi parce qu'après joins vous aurez plusieurs colonnes, vous devez indiquer le nom de la table en demandant la title:

$foods = Food::join('food_ingredient', 'food_ingredient.food_id','=', 'food.id') 
     ->join('ingredients','ingredient.id','=','food_ingredient.ingredient.id') 
     ->where('ingredient.title', 'LIKE', '%' . $search . '%') ... 

En supposant vous voulez rechercher le titre de l'ingrédient

+0

Vous devez modifier la clause where pour répondre à vos besoins, comme indiqué je supposais que vous vouliez rechercher par ingredtient.title ... peut-être 'ingredients.name'? Cela dépend de ce que vous voulez atteindre –

+0

'ingredtient.title' et' food.title' J'ai changé la partie que vous avez mentionnée aussi mon erreur. (toujours une erreur) – mafortis

+0

Vous aviez au départ une recherche basée sur 2 titres (dans la question d'origine aussi), vous devez spécifier les tables ... c'est tout! Je ne peux pas deviner ce dont vous avez besoin ou la logique que vous voulez implémenter parce que je ne sais pas par exemple votre structure de table ni quel SQL vous voulez générer en utilisant Eloquent –