2015-03-18 2 views
0

Я пытаюсь получить значения базы данных для заданного диапазона дат. Проблема в том, что я также пытаюсь достичь, чтобы получить недостающие значения. Если у меня есть значения для 1-й день и 3, и я прошу значений для дней 1-5, я хочу, чтобы получить что-то вроде этого:Laravel: Дата между нулевыми значениями

1 -> Значение

2 -> NULL/0

3 -> Значение

4 -> NULL/0

5 -> NULL/0

Хорошо, я знаю, как решить эту проблему, используя только MySQL и эта временная таблица в LEFT JOIN :

(select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from                        
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0, 
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1, 
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2, 
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3, 
    (select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v 

К сожалению, я не уверен, как включить это в «Красноречивый ОРМ». В настоящее время я имею в виду что-то вроде этого:

$weekclockings = $shift->clockings()->leftJoin(function($query) 
{                 
    $query->raw($aboveQuery); 
}, "v.selected_date", ">", "timeclocked.time_in") 

, но это не работает, и просто дает мне «ErrorException в Grammar.php строке 33: Объект класса закрытия не может быть преобразован в строку».

Итак, возможно, это даже не лучший способ сделать это. Кто-нибудь знает, как это достичь?

+0

Я не получаю часть, где вы смешиваете (порядок?) дневное значение с датой. Как можно отличить то, что должно быть установлено в диапазоне, когда null разрешен? Я имею в виду, если вы знаете, сколько дней вы хотите просто использовать просто, где и заказать его ... – Kyslik

ответ

0

Я не знаю, что clockings() здесь - вероятно, область применения, но использовать сырые SQL в присоединиться, вы должны использовать:

$weekclockings = $shift->clockings()->leftJoin(\DB::raw($aboveQuery), "v.selected_date", ">", "timeclocked.time_in"); 
+0

clockings() был связан. Ваш код работал, спасибо! – mietzekotze

Смежные вопросы