2017-08-30 4 views
1

次のコードをご覧ください。私がCodeigniterで書いたこのコード。条件と注文条件は、それらの投稿要求が設定されている場合にのみ機能します。そうでなければ、私はただselect * from studentです。Laravel Eloquent必要な場合のみ、条件を注文してください

CodeIgniterのコード

$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(); 

Laravelコード

私は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); 

上記のコードを実行できました。このコードは、すべての投稿要求がある場合に機能します。

ただし、first_name投稿要求がない場合は、->where('first_name',$first_name)を削除する必要があります。

投稿がありませんorder_by投稿がない場合は、orderBy($order_by)を削除する必要があります。

上記で行う方法ラーベルコード。

答えて

5

$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

同じアプローチ:

あなたは次のように使用することができます
$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

あなたはそれを行うことができますように、

$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); 

はあなたが理解してほしいです。

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

アプローチは、名前が設定されているかどうかをチェックして、そのようなクエリビルダに追加し、次のようになります。

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

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

$students->paginate(10); 

しかし、あなたがそれをクリーンアップすることができます! Laravel 5.2.27以降あなたは次のように行うことができます。

$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); 

をさらに読みやすいあなたはif文のカスタムマクロを使用できるようにするには:

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

とマクロを:

use Illuminate\Database\Query\Builder; 

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

    return $this; 
}); 

出典:https://themsaid.com/laravel-query-conditions-20160425 この情報が役立ちますようにお願いいたします。

関連する問題