• 06-09-2021, 10:12:18
    #1
    Merhaba
    Biri müşteri, diğeri ise e-postalar şeklinde 2 adet tablom var.
    Yapmak istediğim şey; Mükerrer kayıtları tespit edebilmek için E-posta tablosunda sorgulama yapıp sadece mükerrer olanları getirmek istiyorum. 21. satırdaki having yüzünden kod çalışmıyor (ids > 0 ise sonuçlar listeleniyor, ids > 1 ise listelenmiyor). Sorguyu tek başına çalıştırdığımda ise sonuçları olması gerektiği gibi görüntüleyebiliyorum. Bir türlü içinden çıkamadım. Yardımcı olabilecek kimse var mı?
    Çalıştığım kod aşağıdaki gibi:

    $musterilerQuery = MusterilerModel::select('id','karttipi','ad','soyad','faturaunvani','tckimlikno','pasaportno',
    'verginumarasi','statu','statuneden', 'aktif', 'kontrol')
    ->with([
    'Epostalar',
    'Telefonlar'
    ])
    ->take($pagination)
    ->orderBy('id', $sorgu['siralama'] == 'artan' ? 'asc' : 'desc');
    
    if(isset($sorgu['gruplandirma']) && $sorgu['gruplandirma'] != ''){
    $param = '';
    switch($sorgu['gruplandirma']){
    case 'tckno': $param = 'tckimlikno';
    case 'pasaportno': $param = 'pasaportno';
    case 'vkno': $param = 'verginumarasi';
    case 'eposta':
    // Burası...
    $musterilerQuery->whereHas('Epostalar', function($query){
    $query->select(DB::raw('count(id) as ids'))
    ->groupBy('eposta')
    ->having('ids','>',1);
    });
    break;
    case 'telefon':
    
    break;
    }
    if($param != ''){
    $musterilerQuery->groupBy($param);
    }
    }
    
    $musteriler = $musterilerQuery
    ->offset($offset)
                        ->get();
  • 06-09-2021, 10:30:52
    #2
    $query->groupBy('eposta')->having(DB::raw('count(id)', '>', 1)) şeklinde bir kullanım deneyebilirsiniz.
  • 06-09-2021, 11:22:16
    #3
    Ne yazık ki işe yaramadı.
    Alt sorgu doğru geliyor bana. Where kısmını silerek düz arattığımda sonuçlar normal bir şekilde geliyor. Bu tip bir sorguyu nasıl debug edebiliriz?
    Çıktı SQL şu şekilde:
    SELECT
    `id`,
    `karttipi`,
    `ad`,
    `soyad`,
    `faturaunvani`,
    `tckimlikno`,
    `pasaportno`,
    `verginumarasi`,
    `statu`,
    `statuneden`,
    `aktif`,
    `kontrol`
    FROM
    `musteriler_musteriler`
    WHERE
    EXISTS(
    SELECT
    *
    FROM
    `musteriler_epostalar`
    WHERE
    `musteriler_musteriler`.`id` = `musteriler_epostalar`.`musteri_id`
    GROUP BY
    `eposta`
    HAVING
    COUNT(id) > 1
    ) AND `musteriler_musteriler`.`deleted_at` IS NULL
    ORDER BY
    `id`
    DESC
    LIMIT 100