gpt4 book ai didi

php - Laravel 查询比较数据库中的两个字符串,日期格式为 Y-m

转载 作者:行者123 更新时间:2023-11-29 19:49:16 28 4
gpt4 key购买 nike

所以我的数据库 core_companies 中有一个表。在此表中,我有一个 json 类型的列设置。我在其中存储每家公司的信用卡。它看起来像这样:settings->credit_cards[[0] => {expiration_date: {year: "17", Month: "04"}]我有两个日期选择器,我可以从中在 php 中获取两个日期,如下所示:“2017-04”。我尝试做的是返回信用卡在给定期限内过期的公司,如下所示(由于明显的原因,这不起作用 - 它只是忽略我的查询并返回所有公司):

if ($key == "expiration_date->date_from" && $value) {
$companies = $companies->where("settings->credit_cards->expiration_date", '>=', $value);
}
if ($key == "expiration_date->date_to" && $value) {
$companies = $companies->where("settings->credit_cards->expiration_date", '<=', $value);
}

因此日期选择器存储在对象expiration_date中。第一个选择比较开始的日期(该日期存储在 $value 中)。我怎样才能使这个查询工作?如何将 Y-m 格式的日期与数据库 {year: "17", Month: "04"} 中的两个单独字符串进行比较并返回在给定时间段内过期的信用卡?感谢大家抽出宝贵的时间!

最佳答案

您可以在日期和月份中创建部分值(value),并与例如哪里的结束进行比较。

if ($key == "expiration_date->date_from" && $value) {
$parts = explode('-', $value);
$companies = $companies->where(function($q) use($parts){
// either year is greater or year is same and month is same or greater
$q->where("settings->credit_cards->expiration_date->year", '>', $parts[0])
->orWhere(function($q) use($parts){
$q->where("settings->credit_cards->expiration_date->month", '>=', $parts[1])
->where("settings->credit_cards->expiration_date->year", '=', $parts[0]);
});
});
}

同样适用于 date_to 过滤器

关于php - Laravel 查询比较数据库中的两个字符串,日期格式为 Y-m,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40862677/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com