gpt4 book ai didi

mysql - 基于 NOW() 的 Yii2 显示项目本身不显示日期

转载 作者:行者123 更新时间:2023-11-29 01:51:22 25 4
gpt4 key购买 nike

我正在尝试创建一个“议程中的下一个”项目,以放置在我使用 Yii2 创建的应用程序的索引页面上。

使用下面的函数,我检索数据库中“即将到来”的下一项,并根据旅行类别和日期显示。我正在使用 NOW() 表达式。

但是,这意味着下一个即将到来的项目将一直显示到 NOW() 日期,因此它不会再在当天显示。理想情况下,我应该也显示即将到来的项目,直到时间超过 $this->time 或仅在 NOW() 之后的第二天显示此项目之后的项目。

任何人都可以告诉我如何实现这一目标吗?

public function searchANext($params)
{
$query = Trip::find();
$time = new Expression('NOW()');
$query->where(['class' => Trip::CLASS_A])
->andWhere(['>=', 'date', $time])
->limit(1);

$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => ['defaultOrder' => ['date' => SORT_ASC]],
'pagination' => false
]);

if (!($this->load($params) && $this->validate())) {
return $dataProvider;
}

return $dataProvider;
}

最佳答案

我不知道你为什么要返回一个 ActiveDataProvider 当你只想获得一条记录时,在我看来对于这种情况没有必要。

此外,您正在加载 $params 并在创建查询后验证模型,因此如果 $params 无效,您仍然会收到错误消息并且您无论加载和验证方法返回什么,最终都会返回 $dataProvider

我建议您对代码进行一些更改:

public function searchANext($params)
{
// Try to load $params and validate the model first and return false
// instead of returning the result of the search.
if(!($this->load($params) && $this->validate())) {
return false;
}

// Let's get the currend DateTime. You might need to change this
// depending on the format of the 'date' field from 'Trip'
$now = date('Y-m-d H:i:s');

// Instead of creating an ActiveDataProvider, you can just get the one
// record directly and return it.
$model = Trip::find()
->where(['class' => Trip::CLASS_A])
->andWhere(['>=', 'date', $now])
->orderBy('date ASC')
->one();

return $model;
}

关于mysql - 基于 NOW() 的 Yii2 显示项目本身不显示日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41686164/

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