朋友,我如何在下方(在Yii2 Framewok中)获取我的DatePicker组件,过滤类型为datetime
的字段?由于在组件中,我只能指定date
格式。
_search.php 文件:
<?php
echo DatePicker::widget([
'model' => $model,
'attribute' => 'start_date',
'attribute2' => 'end_date',
'language' => 'pt',
'type' => DatePicker::TYPE_RANGE,
'separator' => 'até',
'options' => [
'placeholder' => '',
],
'pluginOptions' => [
'autoclose'=>true,
'todayHighlight' => true,
'format' => 'yyyy-mm-dd',
]
]);
?>
更新
public function search($params)
{
$query = Report::find();
$dataProvider = new ActiveDataProvider([
'query' => $query,
'sort' => [
'defaultOrder' => [
'created' => SORT_DESC,
]
],
'pagination' => [
'pageSize' => 100,
],
]);
$this->load($params);
if (!$this->validate()) {
return $dataProvider;
}
$query->andFilterWhere([
'id' => $this->id,
'created' => $this->created,
'updated' => $this->updated,
'closed' => $this->closed,
'user_id' => $this->user_id,
'status_id' => $this->status_id,
'location_id' => $this->location_id,
'typeperson_id' => $this->typeperson_id,
'field_cpfcnpj' => $this->field_cpfcnpj,
]);
$query->andFilterWhere(['between', 'created', $this->start_date, $this->end_date]);
$query->andFilterWhere(['between', 'closed', $this->start_closed, $this->end_closed]);
return $dataProvider;
}
答案 0 :(得分:1)
如果我正确理解,您想使用日期范围提交表单,该日期范围应该使用给定范围过滤记录。
看着您search()
的方法,好像您在搜索模型中声明了两个公共属性/字段,名称分别为start_date
和end_date
,与{{1 }},您正在尝试将范围与列DatePicker
进行比较。
您需要执行以下操作才能正确过滤记录
请确保以下内容
created
和start_date
在end_date
模型的safe
规则中声明。
您需要使用ReportSearch
将列中的日期转换为所需的格式,并使用\yii\db\Expression
格式化给定的日期范围,即php:date
和{ {1}}。
在通过start_date
方法返回end_date
之前添加以下内容
$dataProvider
注意:如果您将search()
列另存为if ($this->start_date !== null && $this->end_date !== null) {
$query->andFilterWhere(
[
'BETWEEN',
new Expression(
'DATE_FORMAT(created,"%Y/%m/%d")'
),
date("Y/m/d", strtotime($this->start_date)),
date("Y/m/d", strtotime($this->end_date)),
]
);
}
,则需要像下面这样用created
将字段名包装在现有查询中,否则,如果该列是{ {1}}或timestamp
即可使用。
FROM_UNIXTIME
您完整的DATE
方法如下所示
DATETIME