2015-08-06 5 views
1

Я не понимаю, где идет не так. Когда я добавляю этотLaravel 4 Query with 30 Days Ago Условие

где ('units.solddate', '> =', 'DATE_SUB (CURDATE(), ИНТЕРВАЛ 30 DAY)')

где положение и мой результат пуст. Я пробовал в phpMyadmin, и он возвращает результаты.

$query= (tables) 
     ->select(DB::raw('SUM(units.price) as price, DATE(units.solddate) as date, DAY(units.solddate) as day')) 
     ->where('units.solddate','>=','DATE_SUB(CURDATE(), INTERVAL 30 DAY)') 
     ->where('units.solddate','<=','NOW()') 
     ->groupBy('date') 
     ->get(); 

Прошу совета.

+0

Если 'solddate' является DateTime затем использовать' сейчас() 'вместо' CurDate() ' –

ответ

1

Причина, по которой ограничения не работают, заключается в том, что Eloquent берет значение, которое вы сравниваете с буквально, избегает его, когда это необходимо, а затем использует в запросе. Так что если вы

->where('units.solddate','<=','NOW()') 

вы на самом деле сравнивать units.solddate с Strin NOW(), как в:

... WHERE units.solddate <= 'NOW()' 

Если вы хотите использовать функции MySQL в вашем вы должны явно указать Eloquent/QueryBuilder, что вы имеете в виду исходное значение, которое вы предоставили с помощью DB :: raw(), чтобы обернуть значение.

Следующие должны работать для вас:

->where('units.solddate','>=',DB::raw('DATE_SUB(CURDATE(), INTERVAL 30 DAY)')) 
->where('units.solddate','<=',DB::raw('NOW()')) 
+0

Woww спасибо! не знал, будет обрабатывать NOW() как строку. Благодарю вас: D – hahahaha