如何自定义Yi2 Gridview搜索模型字段
我使用Gii生成CRUD模型、视图和控制器 我使用的表/模型用于抽奖结果,其中包含一个如何自定义Yi2 Gridview搜索模型字段,gridview,yii2,Gridview,Yii2,我使用Gii生成CRUD模型、视图和控制器 我使用的表/模型用于抽奖结果,其中包含一个id、一个reset\u at(datetime)和一个winner\u id,它是用户表的外键。该模型还提供了一种方法,可通过连接表获取所有参与抽奖的用户 我使用的是Kartik的gridview,我希望在字段中的reset\u是一个日期选择器,而winner\u id则是winner的用户名。我已经很容易地设置了表格行,以显示格式化的日期和获胜者的用户名。问题是顶部的搜索字段仍然是datetime(字符串)
id
、一个reset\u at
(datetime)和一个winner\u id
,它是用户表的外键。该模型还提供了一种方法,可通过连接表获取所有参与抽奖的用户
我使用的是Kartik的gridview,我希望在字段中的reset\u是一个日期选择器,而winner\u id则是winner的用户名。我已经很容易地设置了表格行,以显示格式化的日期和获胜者的用户名。问题是顶部的搜索字段仍然是datetime
(字符串)和winner\u id
(整数)
我尝试通过更改规则方法来调整搜索模型,例如:
return [
[['id', 'winner_id'], 'integer'],
[['reset_at'], 'safe'],
];
到
我没有在gridview中使用id
列。然后我尝试将winner\u id
作为字符串读取,通过用户名查找用户,使其等于字符串,并在筛选中使用其id,如下所示:
// grid filtering conditions
$query->andFilterWhere([
'id' => $this->id,
'reset_at' => $this->reset_at,
'winner_id' => $winner->id,
]);
我也尝试过类似的日期字符串,我将过滤器调整为介于之间的日期时间,等等。但是当我这样做时,搜索字段从列的顶部消失
如何自定义这些结果,或者甚至向gridview添加完全自定义的属性以进行自定义筛选
更新:
根据要求,这里是我的搜索模型(代码更改如下)
试试这个:
将联接表添加到查询中:
public function search($params)
{
$query = Raffle::find();
$query->joinWith(['USER_TABLE_RELATION_NAME']); //Change to you relation name
...
$query->andFilterWhere(['like', 'USER_TABLE.name', $this->winner]);
...
不幸的是,我计划使用中间值,但我对yii的查询非常生疏。我不知道如何在活动查询中使用它
要在日期之间搜索,可以使用以下方法:
$query->andFilterWhere(['BETWEEN', 'YOUR_DATE_TABLE_FIELD', $this->start_date, $this->end_date]);
作为其他选项的示例,请检查以下答案:这将帮助您获得所需的结果:@SergheiLeonenco我看到了,这似乎对我没有帮助,因为我最终得到的是从不在查询中的表中选择的错误查询。你能发布你的整个搜索方法吗?@SergheileOnneco发布了整个模型,在初始查询旁边包括这个$query=Raffle::find()代码>下一行此$query->joinWith(['USER\u TABLE\u relationship\u NAME')代码>
public function search($params)
{
$query = Raffle::find();
$query->joinWith(['USER_TABLE_RELATION_NAME']); //Change to you relation name
...
$query->andFilterWhere(['like', 'USER_TABLE.name', $this->winner]);
...
$query->andFilterWhere(['BETWEEN', 'YOUR_DATE_TABLE_FIELD', $this->start_date, $this->end_date]);