#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 способами.
- Вы можете либо установить форматы даты по умолчанию для каждого столбца даты в вашей модели, добавив это также в модель:
protected $dateFormat = 'Y-m-d';
https://laravel.com/docs/5.2/eloquent-mutators#date-mutators
- Вы также можете сделать это во время выполнения в вашем представлении:
{{ 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:
- ‘approve_date’ не является переменной… вам не хватает знака $. Это должно быть что-то вроде этого:
$invoices = Invoice::where(‘user_id’ , Auth::id()) ->where(‘is_approved’, 1)->whereDate(‘$approve_date’, $date)->get();
- эта переменная не объявляется в функции;
- После всего этого у вас есть дата, подобная дате / времени, и вы должны преобразовать формат, используя (например) Carbon https://carbon.nesbot.com/docs /