как получить результат конкретной даты в laravel?

#php #laravel

#php #laravel

Вопрос:

пример я передаю эту дату в $date = 2020-12-28 15:15:53

и

в db approve_date = 2020-12-28 15:15:00

я пытаюсь получить всю запись даты только так 2020-12-28

итак, я попытался

 public function getdatedInvoice($date)
    {
     
        $invoices = Invoice::where('user_id' , Auth::id())->where('is_approved' , 1)->whereDate('approve_date' , $date)->get();
        dd($invoices);
        return view('approved_invoices', compact('invoices'));
    }
 

но когда я пытаюсь использовать whereDate, это ничего мне не дает, как я могу получить эти данные в соответствии с датой?

Комментарии:

1. Привет. попробуйте сделать свой $date в правильном формате. Если вы используете углерод, попробуйте: Carbon::instance($date)->format('Y-m-d') или просто сократите время с вашего $date

Ответ №1:

Прежде всего, по умолчанию Laravel будет обрабатывать approve_date столбец из вашей базы данных только как строку, даже если вы задаете его как date_time столбец.

Чтобы заставить Laravel обрабатывать его как реальную дату, вам нужно добавить это в начало вашей Invoice модели:

 class Invoice extends Model {
    protected $dates = [
        'approve_date'
    ];
}
 

Теперь вы сможете сравнивать даты, не получая странных ошибок.

Чтобы сделать вашу дату отформатированной так, как вы хотите, вы можете сделать это 2 способами.

  1. Вы можете либо установить форматы даты по умолчанию для каждого столбца даты в вашей модели, добавив это также в модель:
     protected $dateFormat = 'Y-m-d';
     

    https://laravel.com/docs/5.2/eloquent-mutators#date-mutators

  2. Вы также можете сделать это во время выполнения в вашем представлении: {{ CarbonCarbon::parse($invoice->approve_date)->format('Y-m-d') }}

Комментарии:

1. я думаю, вы правы, я не использую столбец created_at, но я попробовал класс кода ur Invoice расширяет модель { protected $ dates = [ ‘approve_date’ ]; protected $DateFormat = ‘Y-m-d’; } но это не влияет на то, что мой результат равен нулю, если я пытаюсь получить значение одного столбца

2. Приведенный выше код должен работать, если вашего approve_date столбца нет NULL в вашей БД

3. я думаю, что здесь я получил 1 балл, некоторые из моих строк имеют значение null в approve_date, потому что этот столбец создается спустя долгое время, когда это необходимо, что, по вашему мнению, изменение null может разрешить?

4. Вы можете попробовать добавить ->whereNotNull('created_at'); в свой запрос, чтобы убедиться, что он извлекает только те счета, которые имеют approve_date .

Ответ №2:

  1. ‘approve_date’ не является переменной… вам не хватает знака $. Это должно быть что-то вроде этого:

    $invoices = Invoice::where(‘user_id’ , Auth::id()) ->where(‘is_approved’, 1)->whereDate(‘$approve_date’, $date)->get();

  2. эта переменная не объявляется в функции;
  3. После всего этого у вас есть дата, подобная дате / времени, и вы должны преобразовать формат, используя (например) Carbon https://carbon.nesbot.com/docs /