【问题标题】:Laravel Query Builder: where condition based on user inputLaravel 查询生成器:基于用户输入的条件
【发布时间】:2014-06-25 05:22:18
【问题描述】:

这是我对print_r($_POST)的输出

array([id] => '123', [name] => '', [place] => '', [color] => '')

其中nameplacecolor是用户提交的可选字段.....用户只能选择nameplacecolorname + colorcolor + place、或全部三个name + color + place

如何为用户选择的这些选项设置where 条件?例如,在 Laravel 中,我们使用以下语句选择 DB 表...

 $Select_db = Db::table('mytable')
                  ->where('name', Input::get('name'))
                  ->where('place', Input::get('place'))
                  ->where('color', Input::get('color'))
                  ->select()
                  ->get();

如您所见,上述条件仅在用户输入所有字段时才有效,根据用户输入我想添加where 条件,我们如何解决这个问题???

注意:在这种特殊情况下,我知道我可以为每个条件使用isset()。但是,如果有很多可选输入怎么办?

【问题讨论】:

  • 查看此链接可能对您有帮助stackoverflow.com/questions/19325312/…
  • @Sadikhasan 他们正在为已知输入添加multiple where conditions ......但在我的情况下,它的未知输入似乎与我的问题不同......

标签: php laravel laravel-4


【解决方案1】:

试试这个:-

$Select_db = DB::table('mytable');

if (Input::get('name') != "")
    $Select_db->where('name', Input::get('name'));

if (Input::get('place') != "")
    $Select_db->where('place', Input::get('place'));

if (Input::get('color') != "")
    $Select_db->where('color', Input::get('color'));

$result = $Select_db->get();

如果有多个列要匹配,请尝试使用:-

$Select_db = DB::table('mytable'); 
foreach($_POST as $key => $val){
    if(Input::get($key) != ""){
        $Select_db->where($key, Input::get($key));
    }   
} 
$Select_db->get();

【讨论】:

    【解决方案2】:

    怎么样

    $Select_db = Db::table('mytable');
    foreach($_POST as $key => $val) {
        $Select_db->where($key, Input::get($key));
    }
    $Select_db->query()->get();
    

    也许考虑复制您的$_POST 并在输入foreach 之前删除不需要的值:

    unset($postcopy['badvar'])
    

    【讨论】:

      【解决方案3】:
        public function filter(Request $request)
        {   
          $first_name = $request->input('first_name');
          $sur_name = $request->input('sur_name');
          $email_work = $request->input('email_work');
          $country = $request->input('country');
          $position = $request->input('position');
          $event_id = $request->input('event_id');
          $event_name = $request->input('event_name');
          $nature_of_business = $request->input('nature_of_business');
          $mobile_number = $request->input('mobile_number');
          $event_date = $request->input('event_date');
      
              $record = DB::table('exceldatas');
              if ($request->has('first_name')){
                  $record->where('first_name', $first_name);
              }
              if ($request->has('sur_name')) {
                 $record->where('sur_name', $sur_name);
              }
              if ($request->has('email_work')) {
                  $record->where('email_work', $email_work);
              }
              if ($request->has('country')) {
                  $record->where('country', $country);
              }
              if ($request->has('event_name')) {
                  $record->where('event_name', $event_name);
              }
              if ($request->has('nature_of_business')) {
                  $record->where('nature_of_business', $nature_of_business);
              }
              if ($request->has('mobile_number')) {
                  $record->where('mobile_number', $mobile_number);
              }
              if ($request->has('event_date')) {
                  $record->where('event_date', $event_date);
              }
              $record =$record->paginate(15);
              return view('showresult')->with('record', $record);
      
      }
      

      【讨论】:

        猜你喜欢
        • 2021-09-07
        • 2017-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-20
        • 1970-01-01
        • 2022-01-23
        • 2018-11-12
        相关资源
        最近更新 更多