繁体   English   中英

laravel,将模型中存储的日期格式转换为使用 whereBetween

[英]laravel, convert stored date format in a model to use whereBetween

我想使用 whereBetween 来获取日期间隔,对于 created_date 它工作正常:

$data = Userorder::whereBetween('created_at', [$dateS->format('Y-m-d')." 00:00:00", $dateE->format('Y-m-d')." 23:59:59"])->get();

但是我有另一个列名order_date ,其中该列的日期格式为: Fri Jan,24,2020所以我想将其转换为 Ymd 格式

$dateS = new Carbon($startdate);
$dateE = new Carbon($enddate);
$data = Userorder::whereBetween('order_date', [$dateS->format('Y-m-d'), $dateE->format('Y-m-d')])->get();

模型:

class Userorder extends Model
{
    protected $table = "userorders";
    protected $fillable = [
        'order_number',
        'product_id',
        'order_time',
        'order_date',
        'product_qty',
        'product_price',
        'product_totalprice',
        'totalprice',
        'product_instruction',
        'product_size',
        'storeinfo_id',
        'product_serve',
        'user_id',
        'user_distance',
        'user_address',
        'user_instruction',
        'office_name',
        'st_address',
        'order_state',
        'order_city',
        'order_zipcode',
        'gratuity',
        'suite_floor',
        'driver_ask',
        'phone_number',
        'paid',
        'isdelivery',
        'deliveredon',
        'show',
        'confirmed',
        'isonline',
        'houseaccount'
    ];
    protected $primaryKey = 'id';
    public $timestamps = true;

为了实现您的目标,您应该能够将 Laravel 的whereRaw()方法与 MySQL 的STR_TO_DATE()函数( mysql 日期格式字符串)结合使用:

Userorder::whereRaw('STR_TO_DATE(order_date, "%a %b,%d,%Y") between ? and ?', [$dateS->format('Y-m-d'), $dateE->format('Y-m-d')])->get();

话虽如此,如果可能的话,我建议更新您的表(和相关代码),以便order_date实际上是一个date列而不仅仅是一个字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM