首页 文章

Laravel 4使用WHERE和OR进行Eloquent查询?

提问于
浏览
206

怎么说 WHERE (a = 1 OR b =1 ) AND (c = 1 OR d = 1)

对于更复杂的查询,我应该使用原始SQL吗?

10 回答

  • 4
    YourModel::where(function ($query) use($a,$b) {
        $query->where('a','=',$a)
              ->orWhere('b','=', $b);
    })->where(function ($query) use ($c,$d) {
        $query->where('c','=',$c)
              ->orWhere('d','=',$d);
    });
    
  • 350

    使用Parameter GroupingLaravel 4.2) . 对于你的例子,它是这样的:

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

    Simply Use in Laravel Eloquent:

    $a='foo', $b='bar', $c='john', $d='doe';
    
    Coder::where(function ($query) use ($a, $b) {
        $query->where('a', '=', $a)
              ->orWhere('b', '=', $b);
    })->where(function ($query) use ($c, $d) {
        $query->where('c', '=', $c)
              ->orWhere('d', '=', $d);
    })->get();
    

    Will produce a query like:

    SELECT * FROM <table> WHERE (a='foo' or b='bar') AND (c='john' or d='doe');
    
  • 3

    您还可以查询第一个或条件,稍后您可以应用另一个或条件

    $model = Model::where('a',1)->orWhere('b',1);
    

    现在在 $model 变量上应用另一个条件

    $model1 = $model->where('c',1)->orWhere('d',1)->get();
    
  • 4

    如果你正在循环OR条件,你不需要第二个$ query->来自其他帖子的地方(实际上我认为你不需要一般,你可以在嵌套的地方使用orWhere如果更容易)

    $attributes = ['first'=>'a','second'=>'b'];
    
    $query->where(function ($query) use ($attributes) 
    {
        foreach ($attributes as $key=>value)
        {
            //you can use orWhere the first time, dosn't need to be ->where
            $query->orWhere($key,$value);
        }
    });
    
  • 3

    如果你想在laravel 4中使用括号而不要忘记返回
    在Laravel 4(至少)中,您需要在示例中使用括号中的$ a,$ b

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

    这是我的结果:

  • 1

    另一种不使用Modal的方法

    数据库:stock列:id,name,company_name,exchange_name,status

    $name ='aa'
      $stocks = DB::table('stocks')
                ->select('name', 'company_name', 'exchange_name')
                ->where(function($query) use ($name) {
                    $query->where('name', 'like', '%' . $name . '%')
                    ->orWhere('company_name', 'like', '%' . $name . '%');
                })
                ->Where('status', '=', 1)
                ->limit(20)
                ->get();
    
  • 74

    $a, $b, $c, $d can be dynamic values by the query

    ->where(function($query) use ($a, $b)
            {
                $query->where('a', $a)
                      ->orWhere('b',$b);
            })
     ->where(function($query) use ($c, $d)
            {
                $query->where('c', $c)
                      ->orWhere('d',$d);
            })
    
  • 0

    如果要在Laravel 4中使用a,b,c,d的参数

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

    您还可以使用查询范围使事情变得更加整洁,因此您可以执行以下操作:

    Invoice::where('account', 27)->notPaidAt($date)->get();
    

    然后在你的模型中

    public function scopeNotPaidAt($query, $asAt)
    {
        $query = $query->where(function ($query) use ($asAt) { 
            $query->where('paid', '=', '0000-00-00')->orWhere('paid', '>=', $asAt); 
        });
        return $query;    
    }
    

相关问题