Skip to content

Commit 9bab7b4

Browse files
committed
feat: use database default datetime precision
1 parent 83e28d0 commit 9bab7b4

File tree

3 files changed

+91
-184
lines changed

3 files changed

+91
-184
lines changed

src/Illuminate/Database/Grammar.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,14 @@ public function getDateFormat()
277277
return 'Y-m-d H:i:s';
278278
}
279279

280+
/**
281+
* Get the precision for storing datetimes (null uses the database default).
282+
*/
283+
public function getDatetimePrecision(): ?int
284+
{
285+
return 0;
286+
}
287+
280288
/**
281289
* Get the grammar's table prefix.
282290
*

src/Illuminate/Database/Schema/Blueprint.php

Lines changed: 30 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ public function build(Connection $connection, Grammar $grammar)
119119
*/
120120
public function toSql(Connection $connection, Grammar $grammar)
121121
{
122+
$this->normalizeDatetimePrecision($connection, $grammar);
122123
$this->addImpliedCommands($connection, $grammar);
123124

124125
$statements = [];
@@ -260,6 +261,22 @@ public function addFluentCommands(Connection $connection, Grammar $grammar)
260261
}
261262
}
262263

264+
/**
265+
* Normalizes any `null` datetime precision to the grammar's default.
266+
*/
267+
protected function normalizeDatetimePrecision(Connection $connection, Grammar $grammar): void
268+
{
269+
$types = ['dateTime', 'dateTimeTz', 'time', 'timeTz', 'timestamp', 'timestampTz'];
270+
271+
foreach ($this->columns as $column) {
272+
if (! in_array($column->type, $types, strict: true)) {
273+
continue;
274+
}
275+
276+
$column->precision ??= $grammar->getDatetimePrecision();
277+
}
278+
}
279+
263280
/**
264281
* Determine if the blueprint has a create command.
265282
*
@@ -1103,7 +1120,7 @@ public function date($column)
11031120
* @param int|null $precision
11041121
* @return \Illuminate\Database\Schema\ColumnDefinition
11051122
*/
1106-
public function dateTime($column, $precision = 0)
1123+
public function dateTime($column, $precision = null)
11071124
{
11081125
return $this->addColumn('dateTime', $column, compact('precision'));
11091126
}
@@ -1115,7 +1132,7 @@ public function dateTime($column, $precision = 0)
11151132
* @param int|null $precision
11161133
* @return \Illuminate\Database\Schema\ColumnDefinition
11171134
*/
1118-
public function dateTimeTz($column, $precision = 0)
1135+
public function dateTimeTz($column, $precision = null)
11191136
{
11201137
return $this->addColumn('dateTimeTz', $column, compact('precision'));
11211138
}
@@ -1127,7 +1144,7 @@ public function dateTimeTz($column, $precision = 0)
11271144
* @param int|null $precision
11281145
* @return \Illuminate\Database\Schema\ColumnDefinition
11291146
*/
1130-
public function time($column, $precision = 0)
1147+
public function time($column, $precision = null)
11311148
{
11321149
return $this->addColumn('time', $column, compact('precision'));
11331150
}
@@ -1139,7 +1156,7 @@ public function time($column, $precision = 0)
11391156
* @param int|null $precision
11401157
* @return \Illuminate\Database\Schema\ColumnDefinition
11411158
*/
1142-
public function timeTz($column, $precision = 0)
1159+
public function timeTz($column, $precision = null)
11431160
{
11441161
return $this->addColumn('timeTz', $column, compact('precision'));
11451162
}
@@ -1151,7 +1168,7 @@ public function timeTz($column, $precision = 0)
11511168
* @param int|null $precision
11521169
* @return \Illuminate\Database\Schema\ColumnDefinition
11531170
*/
1154-
public function timestamp($column, $precision = 0)
1171+
public function timestamp($column, $precision = null)
11551172
{
11561173
return $this->addColumn('timestamp', $column, compact('precision'));
11571174
}
@@ -1163,7 +1180,7 @@ public function timestamp($column, $precision = 0)
11631180
* @param int|null $precision
11641181
* @return \Illuminate\Database\Schema\ColumnDefinition
11651182
*/
1166-
public function timestampTz($column, $precision = 0)
1183+
public function timestampTz($column, $precision = null)
11671184
{
11681185
return $this->addColumn('timestampTz', $column, compact('precision'));
11691186
}
@@ -1174,7 +1191,7 @@ public function timestampTz($column, $precision = 0)
11741191
* @param int|null $precision
11751192
* @return void
11761193
*/
1177-
public function timestamps($precision = 0)
1194+
public function timestamps($precision = null)
11781195
{
11791196
$this->timestamp('created_at', $precision)->nullable();
11801197

@@ -1189,7 +1206,7 @@ public function timestamps($precision = 0)
11891206
* @param int|null $precision
11901207
* @return void
11911208
*/
1192-
public function nullableTimestamps($precision = 0)
1209+
public function nullableTimestamps($precision = null)
11931210
{
11941211
$this->timestamps($precision);
11951212
}
@@ -1200,7 +1217,7 @@ public function nullableTimestamps($precision = 0)
12001217
* @param int|null $precision
12011218
* @return void
12021219
*/
1203-
public function timestampsTz($precision = 0)
1220+
public function timestampsTz($precision = null)
12041221
{
12051222
$this->timestampTz('created_at', $precision)->nullable();
12061223

@@ -1213,7 +1230,7 @@ public function timestampsTz($precision = 0)
12131230
* @param int|null $precision
12141231
* @return void
12151232
*/
1216-
public function datetimes($precision = 0)
1233+
public function datetimes($precision = null)
12171234
{
12181235
$this->datetime('created_at', $precision)->nullable();
12191236

@@ -1227,7 +1244,7 @@ public function datetimes($precision = 0)
12271244
* @param int|null $precision
12281245
* @return \Illuminate\Database\Schema\ColumnDefinition
12291246
*/
1230-
public function softDeletes($column = 'deleted_at', $precision = 0)
1247+
public function softDeletes($column = 'deleted_at', $precision = null)
12311248
{
12321249
return $this->timestamp($column, $precision)->nullable();
12331250
}
@@ -1239,7 +1256,7 @@ public function softDeletes($column = 'deleted_at', $precision = 0)
12391256
* @param int|null $precision
12401257
* @return \Illuminate\Database\Schema\ColumnDefinition
12411258
*/
1242-
public function softDeletesTz($column = 'deleted_at', $precision = 0)
1259+
public function softDeletesTz($column = 'deleted_at', $precision = null)
12431260
{
12441261
return $this->timestampTz($column, $precision)->nullable();
12451262
}
@@ -1251,7 +1268,7 @@ public function softDeletesTz($column = 'deleted_at', $precision = 0)
12511268
* @param int|null $precision
12521269
* @return \Illuminate\Database\Schema\ColumnDefinition
12531270
*/
1254-
public function softDeletesDatetime($column = 'deleted_at', $precision = 0)
1271+
public function softDeletesDatetime($column = 'deleted_at', $precision = null)
12551272
{
12561273
return $this->datetime($column, $precision)->nullable();
12571274
}

0 commit comments

Comments
 (0)