izniburak / pdox

useful query builder class that works with PHP PDO class for simple access your data.
http://burakdemirtas.org/pdox-kullanisli-pdo-sinifi-php/
MIT License
298 stars 105 forks source link

Birden fazla grouped ve OR #95

Closed ozgurg closed 3 years ago

ozgurg commented 3 years ago

Merhaba, birden fazla grouped kullandığımda bunları OR ile nasıl ayırabilirim?

Dökümandaki grouped örneğini çalıştırdığımda aşağıdaki sonucu alıyorum ve bu gayet normal.

$db->table('users')
    ->grouped(function($q) {
        $q->where('country', 'TURKEY')->orWhere('country', 'ENGLAND');
    })
    ->where('status', 1)
    ->getAll();
# Ouput: "SELECT * FROM users WHERE (country='TURKEY' OR country='ENGLAND') AND status ='1'"

Ama birden fazla grouped kullandığımda bu ikisini AND ile birleştiriyor.

$db->table('users')
    ->grouped(function($q) {
        $q->where('country', 'TURKEY')->orWhere('country', 'ENGLAND');
    })
    ->grouped(function($q) {
        $q->where('country', 'GERMANY')->orWhere('country', 'FRANCE');
    })
    ->where('status', 1)
    ->getAll();
# Ouput: "SELECT * FROM users WHERE (country = 'TURKEY' OR country = 'ENGLAND') AND (country = 'GERMANY' OR country = 'FRANCE') AND status = 1"

Hedeflediğim sonuç:

SELECT * FROM users WHERE (country = 'TURKEY' OR country = 'ENGLAND') OR (country = 'GERMANY' OR country = 'FRANCE') AND status = 1
izniburak commented 3 years ago

Selamlar @ozgurg , Aslında ikinci grouped içerisindeki builder'a ->orWhere diye başlaman yeterli olacaktır. Aslında yazdığın sorguyu gruplarken, sorguyu yazmaya devam ediyorsun ve ilk şart olarak orWhere belirtirsen, gruplama işlemi OR olarak devam eder. Sonrasında bağlayacağın diğer şartlar, grubun içerisini kapsayacak ama.

ozgurg commented 3 years ago

Selamlar @ozgurg , Aslında ikinci grouped içerisindeki builder'a ->orWhere diye başlaman yeterli olacaktır. Aslında yazdığın sorguyu gruplarken, sorguyu yazmaya devam ediyorsun ve ilk şart olarak orWhere belirtirsen, gruplama işlemi OR olarak devam eder. Sonrasında bağlayacağın diğer şartlar, grubun içerisini kapsayacak ama.

Hmm, teşekkür ederim. 😊

Sonradan bakan olursa diye şu şekilde yaptım:

$db->table('users')
    ->grouped(function($q) {
        $q->where('country', 'TURKEY')->orWhere('country', 'ENGLAND');
    })
    ->grouped(function($q) {
        $q->orWhere('country', 'GERMANY')->orWhere('country', 'FRANCE'); // Baştaki where, orWhere oldu.
    })
    ->where('status', 1)
    ->getAll();
# Ouput: "SELECT * FROM users WHERE (country = 'TURKEY' OR country = 'ENGLAND') OR (country = 'GERMANY' OR country = 'FRANCE') AND status = 1"