2017-09-17 2 views
1

J'ai un champ de recherche qui recherche un nom d'étudiant dans la base de données.Utilisez un champ de recherche pour rechercher des éléments différents dans la base de données

Je voudrais utiliser le même champ de recherche pour afficher tous les élèves de la même classe. Par exemple;

Ce que j'ai;

Lorsqu'un utilisateur entre un nom, par exemple, fidel, les élèves portant le nom Fidel sont affichés.

Ce que je veux;

Un utilisateur à entrer une classe sur le même champ de recherche dit, 5, et tous les élèves de la classe 5 seront affichés.

Ceci est la méthode qui recherche l'étudiant par nom:

public function PostIndex() 
    { 
     $name = Input::get('name'); 

     $validator = validator::make(
      array(
       'name'=>$name 
      ), 

      array(
       'name'=>'required', 
      ) 
     ); 

     if ($validator->fails()) { 
      return back()->withErrors($validator); 
     }else{ 
      $students=DB::table('students')->where('name', $name)->paginate(50); 
     } 

     if (count($students)) { 
      return view('admin.students.index', compact('students')); 
     }else{ 
      Session::flash('fail', 'Sorry, no results found...'); 
      return view('admin.students.index',compact('students'), ['FailMessage' => 'Student by that name not found..'])->withHouse($students); 
     } 
    } 

Quelle est la logique derrière l'utilisation d'une boîte de recherche pour rechercher des éléments dans la base de données?

C'est ma table:

id | name | adm | class | term | fees | created_at | updated_at 
1  Martin 123  5   1  12  1.1.1   1.1.1 
2  John  345  5   1  12  1.1.1   1.1.1 
+1

Vous devez utiliser plusieurs où les conditions sur toutes les colonnes de la même requête que vous souhaitez effectuer la recherche travailler. –

+0

En supposant que je veuille rechercher tous les élèves de la classe 5; Vais-je valider la classe car j'ai un nom validé (référez-vous à mon PostIndex())? puis ajoutez -> where ('class', $ class) dans ma requête? – Martin

+0

Quelque chose comme ceci est ce que je veux dire, DB :: table ('students') -> où ('name', $ search_text) -> ouWhere ('class', $ search_text) -> paginate (50); –

Répondre

0

Au lieu de diverses requêtes différentes que vous pouvez utiliser la valeur de la boîte de recherche et d'interroger quelque chose comme ceci:

DB::table('students') 
->where('name', $search_text) 
->orWhere('class', $search_text) 
->paginate(50); 

Le nombre d'où les conditions seront selon les colonnes sur lesquelles vous souhaitez fonder le résultat de la recherche. Vous pouvez également utiliser 'LIKE' pour les colonnes de texte qui vous donneront de meilleurs résultats.

Pour votre partie validation, vous pouvez renommer votre entrée de 'nom' en 'recherche'. Vous n'aurez pas besoin de deux contrôles d'entrée différents. Un seul champ de recherche et utilisez la même variable pour toutes les colonnes.

Votre nouveau code serait quelque chose comme ça,

public function PostIndex() 
    { 
     $search_text = Input::get('search'); 

     $validator = validator::make(
      array(
       'search'=>$search_text 
      ), 

      array(
       'search'=>'required', 
      ) 
     ); 

     if ($validator->fails()) { 
      return back()->withErrors($validator); 
     }else{ 
      $students=DB::table('students')->where('name', $search_text)->orWhere('class', $search_text)->paginate(50); 
     } 

     if (count($students)) { 
      return view('admin.students.index', compact('students')); 
     }else{ 
      Session::flash('fail', 'Sorry, no results found...'); 
      return view('admin.students.index',compact('students'), ['FailMessage' => 'Student by that name not found..'])->withHouse($students); 
     } 
    } 
+0

dans ce cas dois-je remplacer la variable $ search_text par $ name et le second $ search_text par $ class? – Martin

+0

Non, vous pouvez utiliser la même variable pour les deux conditions où, en supposant que vous voulez un seul champ de recherche. –

+0

en utilisant la même variable signifierait que j'utiliserais $ name dans les deux cas où les conditions, mais je veux rechercher des étudiants dans la même classe, par exemple la classe 5; référez-vous à ma structure de table. – Martin