laravel,将模型中的存储日期格式转换为使用whereBetween [英] laravel, convert stored date format in a model to use whereBetween

查看:436
本文介绍了laravel,将模型中的存储日期格式转换为使用whereBetween的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to use whereBetween to get date interval, for created_date it works fine:

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

但是我还有一个列名 order_date ,其中该列的日期格式为: 2020年1月24日星期五,所以我想将其转换为Ymd格式

But I have another column name order_date where this column have the date in the format: Fri Jan,24,2020 so I want to convert it to the format Y-m-d

$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的

To achieve what you're after you should be able to use Laravel's whereRaw() method in conjunction with MySQL's STR_TO_DATE() function (mysql date format strings):

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列,而不仅仅是字符串.

This being said, if possible I would recommend updating your table (and related code) so that the order_date is actually a date column and not just a string.

这篇关于laravel,将模型中的存储日期格式转换为使用whereBetween的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆