Как запросить данные текущего и предыдущего месяцев из БД, использующей время UNIX EPOCH? - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь запросить БД в формате времени UNIX EPOCH, поэтому я не могу использовать ни один из стандартных модификаторов, к которым я привык.Я слышал, что Carbon был полезен для этих вещей, но я до сих пор не освоил его использование.

    $date = Carbon::today();
    $this_months_values = (new $propdash->custommenuitems->monthly_real_time_feed)::where('time',$date->copy()->format('m'))->sum('data');
    $one_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');


    $two_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');
    $three_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');
    $four_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');
    $five_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');
    $six_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');
    $seven_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');
    $eight_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');
    $nine_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');
    $ten_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');
    $eleven_month_agos_values = (new $propdash->custommenuitems->monthly_real_time_feed)::sum('data');

Так как же мне поступить так?Так выглядит коллекция, когда вы ничего не фильтруете.Как вы можете сказать, «время» - это время EPOCH UNIX.

Collection {#9512 ▼
  #items: array:2 [▼
    0 => Feed115 {#9511 ▼
      #connection: "emoncms"
      #table: "feed_115"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:2 [▼
        "time" => 1552716000
        "data" => 222.314
      ]
      #original: array:2 [▼
        "time" => 1552716000
        "data" => 222.314
      ]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 [▶]
    }
    1 => Feed115 {#9510 ▼
      #connection: "emoncms"
      #table: "feed_115"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:2 [▼
        "time" => 1552629600
        "data" => 405.903
      ]
      #original: array:2 [▼
        "time" => 1552629600
        "data" => 405.903
      ]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #fillable: []
      #guarded: array:1 [▶]
    }
  ]
}

Я пробовал это, но это не сработало:

    $date = Carbon::today();

    /* Yearly Realtime Consumption data feed */
    $startthis = Carbon::now()->startOfMonth()->timestamp;
    $endthis = Carbon::now()->endOfMonth()->timestamp;
    $this_months_values = (new $propdash->custommenuitems->monthly_real_time_feed)::where('time',[$startthis, $endthis])->sum('data');

1 Ответ

1 голос
/ 17 марта 2019

Вы можете сделать что-то подобное для отдельного месяца:

$start = Carbon::parse('-5 months')->startOfMonth()->timestamp;
$end = Carbon::parse('-5 months')->endOfMonth()->timestamp;

$five_month_agos_values = YourModel::whereBetween('time', [$start, $end])->sum('data');

Или, если вам не нравится идея разбора строк:

$start = Carbon::now()->subMonths(5)->startOfMonth()->timestamp;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...