日期格式d.m.Y之间的雄辩模型

时间:2016-01-09 19:17:40

标签: laravel laravel-5 laravel-5.1

我有专栏" exp_date"对于字符串类型,列的格式为d.m.Y. 我希望在两个日期之间获得记录。

我正在尝试使用此代码:

$start = '10.09.2016';
$end = '20.10.2018';

$company->records()->whereBetween('exp_date', [$start, $end])->get();

2 个答案:

答案 0 :(得分:2)

只需使用扩展本机PHP DateTime类的carbon package

示例1:数据库列类型设置为datedateTime     $ start =' 10.09.2016&#39 ;;     $ end =' 20.10.2018';

$start = Carbon::createFromFormat('d-m-Y',  $start)->toDateTimeString(); 
$end = Carbon::createFromFormat('d-m-Y',  $end)->toDateTimeString();

然后创建查询

$company = Records::where(function($q){
    $q->where('exp_date', '<=',$start );
    $q->where('exp_date', '>', $end);

});

$company->get();

示例2:数据库列类型设置为varchar

在这里,您首先必须通过迁移来隐藏现有的表格列。 在修改列之前,请务必将doctrine/dbal依赖项添加到composer.json文件中。

php artisan make:migration update_exp_to_records_table --table=records

编辑迁移文件,添加以下与您的表名相关的文件

Schema::table('records', function ($table) {
    $table->string('expire')->date()->change();
});

仅运行此特定迁移 然后在控制器函数中使用上面的示例1.

答案 1 :(得分:0)

使用原始查询,您应该使用以下内容:

SELECT * FROM table_name 
WHERE UNIX_TIMESTAMP(col_name) > UNIX_TIMESTAMP(:start) 
  AND UNIX_TIMESTAMP(col_name) < UNIX_TIMESTAMP(:end)

您不必在UNIX_TIMESTAMP()中使用$start,而在PHP中使用$end只需strtotime()

注意:如果MySQL没有在unix时间戳中输入你的字符串,可能需要使用函数CAST()

文档:UNIX_TIMESTAMP() in MySQLstrtotime() in PHP