जब भी आप अपने मॉडल वर्ग पर एक स्थिर विधि कहते हैं, तो यह एक धाराप्रवाह क्वेरी देता है जैसे DB::table('yourmodeltable')->method
. यदि आप इसे ध्यान में रखते हैं, तो आप जल्द ही महसूस करेंगे कि एलोक्वेंट मॉडल के साथ कोई भी प्रश्न करना संभव है।
अब, बेहतर प्रदर्शन प्राप्त करने के लिए, आप SQL का उपयोग कर सकते हैं दिनांक () समारोह। नीचे दिए गए मेरे उदाहरण का परीक्षण नहीं किया गया है, इसलिए कृपया इसे बेझिझक सुधारें।
// tomorrow -1 week returns tomorrow's 00:00:00 minus 7 days
// you may want to come up with your own date tho
$date = new DateTime('tomorrow -1 week');
// DATE(objecttime) turns it into a 'YYYY-MM-DD' string
// records are then grouped by that string
$days = Object::where('objecttime', '>', $date)
->group_by('date')
->order_by('date', 'DESC') // or ASC
->get(array(
DB::raw('DATE(`objecttime`) AS `date`'),
DB::raw('COUNT(*) as `count`')
));
foreach ($days as $day) {
print($day->date . ' - '. $day->count);
}
इसे कुछ इस तरह प्रिंट करना चाहिए:
2013-03-09 - 13
2013-03-10 - 30
2013-03-11 - 93
2013-03-12 - 69
2013-03-13 - 131
2013-03-14 - 185
2013-03-15 - 69
संपादित करें:
ऊपर सुझाया गया दृष्टिकोण एलोक्वेंट मॉडल के उदाहरण देता है, जो अजीब लग सकता है, खासकर यदि आप var_dump($days)
. आप फ़्लुएंट की list()
का भी उपयोग कर सकते हैं एक ही चीज़ को प्राप्त करने की विधि।
$date = new DateTime('tomorrow -1 week');
// lists() does not accept raw queries,
// so you have to specify the SELECT clause
$days = Object::select(array(
DB::raw('DATE(`objecttime`) as `date`'),
DB::raw('COUNT(*) as `count`')
))
->where('created_at', '>', $date)
->group_by('date')
->order_by('date', 'DESC') // or ASC
->lists('count', 'date');
// Notice lists returns an associative array with its second and
// optional param as the key, and the first param as the value
foreach ($days as $date => $count) {
print($date . ' - ' . $count);
}