Как получить данные между двумя диапазонами дат? - PullRequest
1 голос
/ 15 апреля 2019

Я хочу получить данные из двух разных диапазонов дат. Как я могу добиться этого? Я попытался и получил данные для начальной даты.

Контроллер

public function detail(Request $request,$id)
{
    if($request->startdate) {
        $advance =Advancepayment::where('date',$request->startdate)->get();
    } else {
        $advance = Advancepayment::all();
    }

    return view('admin.managesalary.detail',compact('advance'));
}

файл блэйда

<form action="{{route('managesalary.detail',$user->id)}}" 
      method="GET" 
      class="form-horizontal"
>
    <div class="card-body">
        <h4 class="card-title">Search</h4>
        <div class="form-group">
            <!-- Date Picker -->
            <div class="input-group date " id="startDate">
                <strong>From</strong>
                <input 
                    type='date'
                    value="{{request()->startdate}}"
                    name="startdate"
                    class="form-control"
                />
            </div>
            <!-- Time Picker -->
            <div class="input-group date" id="startTime">
                <strong>To</strong>
                <input type='date'
                    value="{{request()->enddate}}"
                    name="enddate"
                    class="form-control"
                />
            </div>
        </div>
    </div>
    <br><br>
    <div class="border-top">
        <div class="card-body">
            <button type="submit" class="btn btn-success">Search</button>
            <a href="{{route('managesalary.detail',$user->id)}}"
               class="btn btn-md btn-danger"
            >
                Clear
            </a>
        </div>
    </div>
</form>

маршрут

Route::get('managesalary/detail/{id}',[
    'as' => 'managesalary.detail',
    'uses' => 'ManagesalaryController@detail'
]);

Ожидаемый результат, как показано ниже: enter image description here enter image description here

Ответы [ 3 ]

3 голосов
/ 15 апреля 2019

Давайте диапазон дат с прошлого 15/04 по 15/04 год, код будет выглядеть как

$from = date('2018-04-15');
$to = date('2019-04-15');

$advance = Advancepayment::whereBetween('date', [$from, $to])->get();

если есть условие, $ $ пусто, вы можете поставить условное

public function detail(Request $request,$id)
{
    $from = $request->input('startdate');
    $to = $request->input('enddate');
    if ( empty($to) && empty($from) ) {
        $advance = Advancepayment::all();
    } elseif ( empty($to) && ! empty($from) ) {
        $advance = Advancepayment::where('date', $from)->get();
        // or Advancepayment::where('date', '>', $from)->get(); depending upon your requirmeent
    } else {
        $advance = Advancepayment::whereBetween('date', [$from, $to])->get();
    }
}
0 голосов
/ 15 апреля 2019
public function detail(Request $request,$id)
{
$startdate=$request->input('from');
$enddate=$request->input('to');   
if(!empty($request->startdate) && !empty($enddate)) {
    $advance =Advancepayment::whereBetween('date',[$startdate,$enddate])->get();
} 
else if(!empty($request->startdate) && empty($enddate))
{
    $advance =Advancepayment::where('date','>=',$request->startdate)->get();

}
else
{
    $advance = Advancepayment::all();
}

return view('admin.managesalary.detail',compact('advance'));
}
0 голосов
/ 15 апреля 2019

Я создал область действия модели

Подробнее об областях применения

Код:

    /**
     * Scope a query to only include the last n days records
     *
     * @param  \Illuminate\Database\Eloquent\Builder $query
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function scopeWhereDateBetween($query,$fieldName,$fromDate,$todate)
    {
        return $query->whereDate($fieldName,'>=',$fromDate)->whereDate($fieldName,'<=',$todate);
    }

А в контроллере, если вы используете библиотеку Углерода для обработки дат, добавьте Библиотеку Углерода в начало

use Carbon\Carbon;

OR

use Illuminate\Support\Carbon;

Чтобы получить запись за последние 10 дней с этого момента

 $lastTenDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(10)->toDateString(),(new Carbon)->now()->toDateString() )->get();

Чтобы получить запись за последние 30 дней с этого момента

 $lastThirtyDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(30)->toDateString(),(new Carbon)->now()->toDateString() )->get();

Итак, для вашей ситуации:

$recordResults = ModelName::whereDateBetween('filedName','2019-04-10','2019-04-12')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...