2017-08-30 4 views
1

Veuillez regarder le code suivant. Ce code j'ai écrit avec Codeigniter. Ce dont j'ai besoin pour le mettre en évidence lorsque la condition et les conditions de commande ne fonctionnent que si ces demandes de publication sont définies. Sinon, j'ai juste select * from student.Laravel Éloquent où et conditions de commande seulement si nécessaire

Codeigniter code

$this->db->select('*'); 
$this->db->from('student'); 
if($this->input->post('first_name') != NULL){ 
    $first_name = $this->input->post('first_name'); 
    $this->db->where('first_name', $first_name); 
} 

if($this->input->post('last_name') != NULL){ 
    $last_name= $this->input->post('last_name'); 
    $this->db->where('last_name', $last_name); 
} 

if($this->input->post('order_by') != NULL){ 
    $order_by= $this->input->post('order_by'); 
    $this->db->order_by($order_by); 
} 

$query = $this->db->get(); 

code Laravel

Je vais faire la même chose avec Laravel.

$first_name = $request->input('first_name'); 
$last_name = $request->input('last_name'); 
$order_by = $request->input('$order_by'); 

$students = Student::orderBy($order_by) 
     ->where('first_name',$first_name) 
     ->where('last_name',$last_name); 
     ->paginate(10); 

Je peux courir au-dessus du code. Le code fonctionne lorsqu'il y a toutes les demandes de publication.

Mais s'il n'y a pas first_name post demande, je dois supprimer ->where('first_name',$first_name).

S'il n'y a pas order_by post demande, je dois supprimer orderBy($order_by). Comment faire avec le code Laravel ci-dessus.

Répondre

5

vous pouvez utiliser comme,

$students = Student::latest(); 

if (isset($request->input('order_by'))) { 
    $students->orderBy($order_by) 
} 
if (isset($request->input('first_name'))) { 
      $students->where('first_name',$first_name); 
} 
if (isset($request->input('last_name'))) { 
      $students->where('last_name',$last_name); 
} 
$students->paginate(10); 
0

approche même:

$first_name = $request->input('first_name'); 
$last_name = $request->input('last_name'); 
$order_by = $request->input('$order_by'); 

$query = Student::orderBy($order_by); 
if ($first_name) { 
    $query->where('first_name',$first_name); 
} 

if ($last_name) { 
    $query->where('last_name',$last_name); 
} 

$students = $query->paginate(10); 
return $students; 
0

Vous pouvez le faire comme,

$first_name = $request->input('first_name'); 
$last_name = $request->input('last_name'); 
$order_by = $request->input('order_by'); 

$query = DB::table('student'); 

if($request->first_name){ 
    $query->where('first_name',$first_name) 
} 

if($request->last_name){ 
    $query->where('last_name',$last_name); 
} 

if($request->order_by){ 
    $query->orderBy($order_by); 
} 

$students = $query->paginate(10); 

espère que vous comprenez.

0
$query = Student::where('last_name',$last_name); 
if ($request->has('first_name')) { 
    $query->where('first_name',$first_name); 
} 
if ($request->has('order_by')) { 
    $query->orderBy($order_by); 
} 

$students = $query->paginate(10); 
0

Une approche serait de vérifier si le nom est défini, puis l'ajouter au générateur de requêtes comme ceci:

$first_name = $request->input('first_name'); 
... 

$students = Student::orderBy($order_by) 
if ($first_name) { 
    $students->where('first_name',$first_name) 
} 

$students->paginate(10); 

Cependant, vous pouvez nettoyer ça! Depuis Laravel 5.2.27 vous pouvez faire comme suit:

$students = Student::orderBy($order_by) 
->when($request->input('first_name'), function($query) use ($request){ 
    return $query->where('first_name', $request->input('first_name')); 
}) 
->paginate(10); 

Pour rendre encore plus lisible que vous pouvez utiliser une macro personnalisée pour les instructions if:

$students = Student::orderBy($order_by) 
->if($request->input('first_name'), 'first_name', '=', $request->input('first_name')) 
->paginate(10); 

Et la macro:

use Illuminate\Database\Query\Builder; 

Builder::macro('if', function ($condition, $column, $operator, $value) { 
    if ($condition) { 
     return $this->where($column, $operator, $value); 
    } 

    return $this; 
}); 

Source: https://themsaid.com/laravel-query-conditions-20160425 J'espère que cela aide!