Merhaba,
istediğim sonucu aldığım
bir sql sorgum var. Bu sorguyu laravel model sayfamda çalıştırmak istiyorum.
Bu anlamda sorumu özet ve detaylı olarak 2 şekilde aşağıya bırakıyorum. Anlaşılmayan yer varsa lütfen cevap yazın.
ÖZET:
Aşağıdaki çalışan sql sorguma göre nasıl bir laravel sorgusu oluşturabilirim?
select `tableA`.*, `tableB`.`start_date`, `tableB`.`end_date`, `tableB`.`price` from `tableA` right join( SELECT id, start_date, end_date, pro_id, price, DATEDIFF(`tableB`.`end_date`, '2021-03-07') diff FROM `tableB` GROUP BY id order by diff asc ) `tableB` on `tableA`.`id` = `tableB`.`pro_id` where (date(`end_date`) >= '2021-03-07') group by `tableA`.`id` order by `price` desc
YA DA
şu kod ile tableB'den son price değeri geliyor. Bunu tam tersine çevirip, bugünden küçük olmama şartı eklemek de istediğim sonucu verir diye düşünüyorum. Bu yapılabilir mi?
$query->join('tableB', 'tableA.id', '=', 'tableB.pro_id')
->select('tableA.*', 'tableB.start_date', 'tableB.end_date', 'tableB.price')
->where(function($sq) use ($postFrom) {
$sq->when($postFrom[0]=='0', function ($syq) {
$syq->whereDate('end_date', '>=', now()->format('Y-m-d');
}, function ($stq) use ($postFrom) {
$stq->whereDate('start_date', '<=', $postFrom[0])
->whereDate('end_date', '>=', $postFrom[0]);
});
})->groupBy('tableA.id')->orderBy('price', desc);DETAYLI ANLATIM:
Birçok farklı formatta bunu çalıştırmayı denedim fakat bir türlü doğru sonucu alamadım.
En son DB::Select kullandım:
\DB::select("select `tableA`.*, `tableB`.`start_date`, `tableB`.`end_date`, `tableB`.`price` from `tableA` right join( SELECT id, start_date, end_date, pro_id, price, DATEDIFF(`tableB`.`end_date`, '2021-03-07') diff FROM `tableB` GROUP BY id order by diff asc ) `tableB` on `tableA`.`id` = `tableB`.`pro_id` where (date(`end_date`) >= '2021-03-07') group by `tableA`.`id` order by `price` desc");Fakat burada filtreleme yapıldığı için normal $query düzeni ile devam etmem gerekiyor sanırım.
return edilen şu kısımdan dolayı bunu düşünüyorum.
return $query->paginate($perPage, $page);
Not: Laravel sürümüm desteklemediği için joinSub kullanamıyorum.
Not2: Uzun zamandır bununla uğraşıyorum. Fikri olup uğraşmak istemezseniz de en azından bir ipucu bırakırsanız mutlu olurum.
Okuyan herkese teşekkür ederim.