Как получить прошлогоднюю запись из базы данных в laravel? - PullRequest
0 голосов
/ 01 июня 2019

у меня есть таблица оставшиеся_базы_файлов.

id    | date         | student_id | remaining_balance
-----------------------------------------------------
1     | 2019-04-05   | 1          |     500  
2     | 2019-05-10   | 2          |     400     
3     | 2019-05-13   | 3          |     300

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

$remain_fee = \DB::table('remaining_bus_fees')
        ->whereMonth('date', '<', Carbon::now()->subMonth()->month)
        ->where('student_id', '=', 2)->get();

Ответы [ 4 ]

0 голосов
/ 01 июня 2019

Попробуйте,

$remain_fee = \DB::table('remaining_bus_fees')
    ->whereMonth('date', '=', Carbon::now()->subMonth()->month)
    ->whereStudentId(2)->get();
0 голосов
/ 01 июня 2019

Вот полезные запросы:

 $today=DB::table('remaining_bus_fees')->whereRaw('Date(created_at) = CURDATE()')->where('student_id', 2)->get();

 $yesterday= DB::table('remaining_bus_fees')->whereDate('created_at',Carbon::yesterday())->get();

 $last_7_days= DB::table('remaining_bus_fees')->whereBetween('created_at', [Carbon::now()->startOfWeek(), Carbon::now()->endOfWeek()])->get();

 $this_month=DB::table('remaining_bus_fees')->whereMonth('created_at',Carbon::now()->month)->whereYear('created_at', date('Y'))->where('student_id', 2)->get();

 $last_month=DB::table('remaining_bus_fees')->whereMonth('created_at',Carbon::now()->subMonth()->format('m'))->whereYear('created_at', date('Y'))->where('student_id', 2)->get();
0 голосов
/ 01 июня 2019

Измените свой код на этот, и он должен работать нормально, вам нужно преобразовать ваш Carbon :: now () в формат даты, так как вы будете использовать whereDate здесь, он будет учитывать только дату.

$remain_fee = \DB::table('remaining_bus_fees')
        ->whereDate('date', '<', Carbon::now()->subMonth()->toDateString())
        ->where('student_id', '=', 2)->get();

Пример в повозке

>>> App\User::whereDate('created_at', Carbon\Carbon::now()->subMonth()->toDateSt
ring())->get()
=> Illuminate\Database\Eloquent\Collection {#3120
     all: [
       App\User {#3114
         id: 90,
         name: "******",
         email: "******@gmail.com",
         created_at: "2019-05-01 06:17:47",
         updated_at: "2019-05-02 00:28:18",
       },
     ],
   }
>>>
0 голосов
/ 01 июня 2019

В тот момент, когда ваш код говорит, где дата «раньше месяца назад», тогда как она должна быть там, где дата равна месяц назад (т.е. удалить <). Кроме того, я бы предложил добавить год к запросу, иначе вы начнете получать результаты предыдущих лет.

Это должно дать вам то, что вам нужно:

$date = Carbon::now()->subMonth();

$remain_fee = \DB::table('remaining_bus_fees')
    ->whereMonth('date', $date->month)
    ->whereYear('date', $date->year)
    ->where('student_id', 2)
    ->get();
...