Laravel 4 Fasih Menggunakan Query MANA dengan ATAU DAN ATAU?

Bagaimana saya mengatakan di MANA (a = 1 ATAU b =1 ) DAN (c = 1 ATAU d = 1)

Untuk lebih rumit pertanyaan saya seharusnya menggunakan baku SQL?

Larutan

Membuat penggunaan Parameter Pengelompokan (Laravel 4.2). Untuk contoh,'d menjadi sesuatu seperti ini:

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

Jika anda ingin menggunakan parameter untuk a,b,c,d di 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);
});
Komentar (0)

jika anda ingin menggunakan tanda kurung di laravel 4 dan don't lupa kembali
Di Laravel 4 (setidaknya) anda perlu menggunakan $a, $b dalam tanda kurung seperti pada contoh

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

Ini adalah hasil saya:

Komentar (1)

Memetikan anda're perulangan ATAU kondisi, anda don't membutuhkan kedua $query->di mana dari posting lain (sebenarnya saya don't pikir anda butuhkan pada umumnya, anda hanya dapat menggunakan orWhere di bersarang di mana jika mudah)

$attributes = ['first'=>'a','second'=>'b'];

$query->where(function ($query) use ($attributes) 
{
    foreach ($attributes as $key=>value)
    {
        //you can use orWhere the first time, doesn't need to be ->where
        $query->orWhere($key,$value);
    }
});
Komentar (1)

$a, $b, $c $d dapat menjadi nilai-nilai yang dinamis dengan permintaan

 ->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);
        })
Komentar (1)

Hanya Gunakan di Laravel Fasih:

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

Akan menghasilkan query seperti:

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

Anda juga dapat menggunakan query lingkup untuk membuat hal-hal sedikit lebih rapi, sehingga anda dapat melakukan sesuatu seperti:

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

Kemudian di model anda

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

Anda juga dapat permintaan pertama atau kondisi dan kemudian anda dapat menerapkan satu atau kondisi

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

sekarang terapkan pada kondisi lain bahwa $model variabel

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

Cara lain tanpa menggunakan Modal

Database: saham Kolom:id,nama,nama_perusahaan,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();
Komentar (0)
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);
});
Komentar (0)

Cara terbaik untuk menggunakan sql kurung menggunakan fungsi callback di laravel fasih.

YourModal::where(function ($q) {
    $q->where('a', 1)->orWhere('b', 1);
})->where(function ($q) {
    $q->where('c', 1)->orWhere('d', 1);
});

Anda don't harus menggunakan = simbol, it's datang sebagai default

Jangan-jangan katakan jika anda memiliki pertanyaan yang mengandung tanda kurung di dalam tanda kurung

WHERE (a = 1 OR (b = 1 and c = 5))

YourModal::where(function ($q) {
    $q->where('a', 1)->orWhere(function($q2){
      $q2->where('b', 1)->where('c', 5);
    });
});

jangan mengatakan anda ingin membuat nilai-nilai dinamika

YourModal::where(function ($q) use($val1, $val2) {
    $q->where('a', $val1)->orWhere(function($q2) use($val2){
      $q2->where('b', $val2)->where('c', $val2);
    });
});
Komentar (0)