Làm cách nào để nói WHERE (a=1 OR b=1) AND (c=1 OR d=1)
Laravel 4 eloquent WHERE với OR AND OR?
Đối với các truy vấn phức tạp hơn, tôi có nên sử dụng SQL thô không?
Làm cách nào để nói WHERE (a=1 OR b=1) AND (c=1 OR d=1)
Laravel 4 eloquent WHERE với OR AND OR?
Đối với các truy vấn phức tạp hơn, tôi có nên sử dụng SQL thô không?
Sử dụng Parameter Grouping (Laravel 4.2). Ví dụ của bạn, nó muốn được một cái gì đó như thế này:
Model::where(function ($query) {
$query->where('a', '=', 1)
->orWhere('b', '=', 1);
})->where(function ($query) {
$query->where('c', '=', 1)
->orWhere('d', '=', 1);
});
Nếu bạn muốn sử dụng các thông số cho a, b, c, d trong Laravel 4
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);
});
Trong trường hợp bạn đang looping OR điều kiện, bạn không cần các $ thứ hai query-> nơi từ các bài viết khác (thực sự tôi không nghĩ rằng bạn cần nói chung, bạn chỉ có thể sử dụng orWhere trong lồng nhau mà nếu dễ dàng hơn)
$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);
}
});
Tôi nghĩ bạn sẽ phải thêm từ khóa 'use' để sử dụng biến thuộc tính bên trong vị trí đó. –
Bạn cũng có thể sử dụng phạm vi truy vấn để làm mọi thứ chút ngăn nắp, vì vậy bạn có thể làm điều gì đó như:
Invoice::where('account', 27)->notPaidAt($date)->get();
Sau đó, trong mô hình của bạn
public function scopeNotPaidAt($query, $asAt)
{
$query = $query->where(function ($query) use ($asAt) {
$query->where('paid', '=', '0000-00-00')->orWhere('paid', '>=', $asAt);
});
return $query;
}
Bạn cũng có thể truy vấn đầu tiên hay điều kiện và sau đó bạn có thể áp dụng một hoặc điều kiện
$model = Model::where('a',1)->orWhere('b',1);
hiện áp dụng một điều kiện khác trên đó $model
biến
$model1 = $model->where('c',1)->orWhere('d',1)->get();
nếu bạn muốn sử dụng dấu ngoặc đơn trong laravel 4 và đừng quên quay trở lại
Trong Laravel 4 (ít nhất), bạn cần phải sử dụng $ a, $ b trong ngoặc như trong ví dụ
$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);
});
Cảm ơn bạn đã đề cập đến việc sử dụng ($ a, $ b) – mentorgashi
$ a, $ b, $ c, $ d có thể giá trị năng động bằng cách truy vấn
->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);
})
Đơn giản chỉ cần sử dụng trong Laravel hùng biện:
$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();
Sẽ tạo ra một truy vấn như:
SELECT * FROM <table> WHERE (a='foo' or b='bar') AND (c='john' or d='doe');
Chỉ cần 'function ($ query) sử dụng ($ param1, param2 $) ... ' ; Ồ, bạn đã xóa nhận xét của mình. – rmobis
Liên kết chính xác với Laravel doco là: http://laravel.com/docs/queries#advanced-where-clauses – dave