Laravel查询数据库'AND''或'在哪里或哪里

时间:2014-05-10 07:50:07

标签: php mysql laravel-4

在Laravel 4中,我建立了一个搜索表单。如果一个人可以提交

电子邮件地址 从 - 到目前为止 参考编号

他们只能使用上述选项之一进行搜索;因为他们必须从他们想要搜索的下拉列表中进行选择。我用来完成这项工作的最终代码如下:

if(Input::get('from') && Input::get('to')){
            $records = Applications::where('created_at', '>=', Input::get('from'))
                ->where('created_at', '<', date('Y-m-d', strtotime(Input::get('to'). ' + 1 days')))
                ->lists('id');
    }elseif(Input::get('email') || Input::get('ref')){
        $records = Applications::where('Application_number', '=', Input::get('ref'))
            ->where('email', '=', Input::get('email'), 'OR')
            ->lists('id');
    }else{
        $records = Applications::all()->lists('id');
    }

符合我的要求,但我真的很高兴这是最好的解决方案。

我还尝试使用此帖子Laravel 4 eloquent WHERE with OR AND OR?

中的任一解决方案
$result = User::where('created_at', 'LIKE', '%' . $search . '%')
    ->where('updated_at', 'LIKE', '%' . $search . '%', 'OR')
    ->where('user_first_name', 'LIKE', '%' . $search . '%', 'AND')
    ->where('user_any_field', 'LIKE', '%' . $search . '%')->get();

OR

    Model::where(function ($query) {
    $query->where('a', '=', 1)
          ->orWhere('b', '=', 1);
})->where(function ($query) {
    $query->where('c', '=', 1)
          ->orWhere('d', '=', 1);
});

但是,我一直得到的是价值不能为零,当从中搜索时;电子邮件和ref工作正常。

1 个答案:

答案 0 :(得分:3)

你可以试试这个:

$input = Input::all();

Model::where(function($query) use ($input) {
     if (isset($input['something'])) {
         $query->where('some_field_1', '=', $input['something']);
     }

     if (isset($input['something_else'])) {
         $query->where('some_field_2', '=', $input['something_else']);
     }
})->get();

我认为这是最干净的方式。当然,你应该把if语句放在你需要的地方。