Я знаю, что есть поля, которые автоматически вставляются (например, updated_at и created_at ), но мне было интересно, есть ли способ timestamp () или метод Laravel для создания временных меток?
Например, я хочу записывать временную метку каждый раз, когда пользователь входит в систему и хранит ее в базе данных, поэтому мы можем видеть последние данные о дате и времени каждого пользователя.
Вы можете наблюдать за событием auth.login
и обновлять последнее время входа пользователя. Посмотрите первый пример в документации для событий, чтобы выполнить именно то, что вы пытаетесь сделать.
Event::listen('auth.login', function($user) { $user->last_login = new DateTime; $user->save(); });
Примечание . В 4.0 имя события – user.login
. В 4.1 название события – auth.login
Это действительно зависит от вас, где вы ставите слушателей событий. Если вы прочитали ссылку на страницу документа, в ней указано:
Итак, вы знаете, как регистрировать события, но вам может быть интересно, где их регистрировать. Не беспокойтесь, это общий вопрос. К сожалению, это трудный вопрос, потому что вы можете зарегистрировать мероприятие почти в любом месте! Но вот несколько советов. Опять же, как и большинство других загрузочных кодов, вы можете регистрировать события в одном из ваших начальных файлов, таких как app / start / global.php.
Если ваши стартовые файлы становятся слишком переполненными, вы можете создать отдельный файл app / events.php, который включен в стартовый файл. Это простое решение, которое позволяет вашей регистрации событий быть полностью отделен от остальной части вашей начальной загрузки. Если вы предпочитаете подход на основе класса, вы можете регистрировать свои события у поставщика услуг. Поскольку ни один из этих подходов не является по сути «правильным», выберите подходящий вам подход, основанный на размере вашего приложения.
Мои личные предпочтения состоят в том, чтобы зарегистрировать их у поставщика услуг, так как это будет держать их в секрете, и для меня это более «способ Laravel». Если вам нужна помощь с поставщиками услуг, см. Эту запись в документации.
Однако, если вы действительно хотите получить что-то и запустить как можно быстрее, вам будет легко зарегистрировать этого слушателя внутри app/start/global.php
В Laravel 5.2+ (также проверенный на 5.4) процесс немного отличается. Во-первых, добавьте слушателя в EventServiceProvider:
protected $listen = [ 'Illuminate\Auth\Events\Login' => [ 'App\Listeners\LogSuccessfulLogin', ], ];
Затем выполните:
php artisan event:generate
Что создаст новый слушатель в приложении / Listeners. Теперь отредактируйте свой прослушиватель, чтобы прикоснуться к дате в столбце last_login в таблице ваших пользователей:
public function handle(Login $event) { $event->user->last_login = date('Ymd H:i:s'); $event->user->save(); }
Убедитесь, что Listener, созданный Artisan, имеет правильные пространства имен наверху. Для этого конкретного случая правильные пространства имен в вашем слушателе должны быть:
use Illuminate\Auth\Events\Login; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue;
У меня был аналогичный вопрос. Если вы не почувствуете необходимость использования событий, вы можете обновить временную метку после аутентификации пользователя. Я поместил следующий код в свой метод контроллера, который обрабатывает аутентификацию пользователя.
if (Auth::attempt(array('email'=>$email, 'password'=>$password))) { Auth::user()->last_login = new DateTime(); Auth::user()->save(); return Redirect::intended('/'); } else { return Redirect::to('account/login'); }
Это делает работу для меня.