Поле dateTime
Метод dateTime применяется в миграциях Laravel для создания столбца типа DATETIME. Он принимает имя колонки в качестве первого параметра и, опционально, второй параметр - количество цифр для долей секунды. По умолчанию точность составляет 0 (секунды). Этот метод идеально подходит для хранения моментов времени, когда важна как дата, так и время, например, для времени создания заказа или даты и времени проведения события.
Синтаксис
<?php
// Создание колонки dateTime
Schema::table('table_name', function (Blueprint $table) {
$table->dateTime('column_name');
});
?>
Метод возвращает экземпляр ColumnDefinition, что позволяет применять дополнительные модификаторы, такие как nullable или default.
Пример
Давайте создадим миграцию для таблицы 'events' с полем 'start_time' типа dateTime:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('events', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->dateTime('start_time');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('events');
}
};
?>
Пример
Добавим поле 'end_time' с точностью до миллисекунд (3 цифры для долей секунды):
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('events', function (Blueprint $table) {
$table->dateTime('end_time', precision: 3)->nullable();
});
}
public function down(): void
{
Schema::table('events', function (Blueprint $table) {
$table->dropColumn('end_time');
});
}
};
?>
Второй параметр 3 указывает, что мы хотим хранить время с точностью до миллисекунд.
Пример
Теперь создадим модель Event и сохраним запись с датой и временем:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Event extends Model
{
protected $fillable = ['name', 'start_time', 'end_time'];
protected $casts = [
'start_time' => 'datetime',
'end_time' => 'datetime',
];
}
?>
<?php
use App\Models\Event;
use Illuminate\Support\Facades\Route;
use Carbon\Carbon;
Route::get('/create-event', function () {
$event = Event::create([
'name' => 'Laravel Meeting',
'start_time' => Carbon::now(),
'end_time' => Carbon::now()->addHours(2),
]);
echo "Event created with ID: " . $event->id;
});
?>
Результат выполнения кода:
"Event created with ID: 1"
Пример
Получим все события, у которых время начала позже текущего момента:
<?php
use App\Models\Event;
use Illuminate\Support\Facades\Route;
use Carbon\Carbon;
Route::get('/upcoming-events', function () {
$res = Event::where('start_time', '>', Carbon::now())->get();
foreach ($res as $event) {
echo $event->name . " starts at " . $event->start_time . "\n";
}
});
?>
Результат выполнения кода:
"Laravel Meeting starts at 2026-09-08 14:30:00"
Смотрите также
-
метод
date,
который создаёт колонку для хранения только даты -
метод
time,
который создаёт колонку для хранения только времени -
метод
timestamp,
который создаёт колонку с типом TIMESTAMP -
метод
dateTimeTz,
который создаёт колонку с датой, временем и временной зоной