tobya/laravel-mssql-dateformat
This package (laravel-mssql-dateformat) bridges Laravel's Eloquent with Microsoft SQL Server's date formatting quirks. First step: Install via Composer:
composer require tobya/laravel-mssql-dateformat
Publish the config (if needed) with:
php artisan vendor:publish --provider="TobyA\MssqlDateFormat\MssqlDateFormatServiceProvider"
First use case: Automatically format dates in queries to avoid SQL Server's DATE/DATETIME precision errors. No manual casting required—just use Eloquent as usual.
Carbon instances to SQL Server-compatible formats (e.g., CONVERT(DATETIME, ...)). No explicit configuration needed for basic use.config/mssql-dateformat.php:
'formats' => [
'datetime' => 'Y-m-d H:i:s', // Custom format for DATETIME columns
],
formatForMssql() helper or MssqlDateFormat::format() method for one-off cases:
$formatted = formatForMssql($carbonInstance, 'datetime');
MssqlDateTime column type for new tables:
Schema::create('events', function (Blueprint $table) {
$table->mssqlDateTime('scheduled_at');
});
Fractal or Transformers to ensure consistent date serialization across layers.MssqlDateFormat facade in unit tests to isolate date logic:
$this->partialMock(MssqlDateFormat::class, function ($mock) {
$mock->shouldReceive('format')->andReturn('2023-01-01 00:00:00');
});
php artisan config:clear
php artisan view:clear
Carbon instances are timezone-aware or explicitly set:
$carbon->setTimezone('UTC');
order or group may conflict with SQL Server syntax. Use backticks or alias them in queries.DB::enableQueryLog();
User::where('created_at', today())->get();
dd(DB::getQueryLog());
DB::raw() with caution—manually format dates if needed.MssqlDateFormat class to support other databases (e.g., PostgreSQL):
class CustomDateFormat extends MssqlDateFormat {
public function format($value, $type = 'datetime') {
// PostgreSQL logic here
}
}
eloquent.query events to inject custom formatting logic:
Event::listen('eloquent.query', function ($query) {
if ($query->getConnection()->getDriverName() === 'sqlsrv') {
// Modify query bindings
}
});
trait MssqlDateFormatTest {
protected function assertMssqlDateFormat($expected, $actual) {
$this->assertEquals($expected, $actual, '', 0.0001);
}
}
config/app.php under providers (it should be auto-discovered, but verify for custom setups).How can I help you explore Laravel packages today?