Yii2 SearchModel查询-将整数值映射到字符串

时间:2018-10-25 08:55:59

标签: mysql sql yii2

我要实现的目标:

我有一个带有type字段的表,其中包含整数值。这些整数值表示不同的字符串。

我希望能够使用整数表示的字符串值搜索表。

例如type = abc而不是type = 0

我尝试了什么:

我为模型创建了一个查询类,并尝试利用$boolean_map属性:

class ReportQuery extends FilterableQuery
{
    protected $filterable = [
        'type' => 'LIKE',
        'removed_the_rest'
    ];
    protected $boolean_map = ["type" => [ 'addacs' => 0, "arudd" => 1,]];

}

然后,我重写了模型的find方法以使用查询类:

 public static function find()
 {
    $query = new ReportQuery(get_called_class());
    return $query;
 }

在搜索模型中,我有:

public function search($params)
{
    $query = Report::find();

    $dataProvider = new ActiveDataProvider([
        'query' => $query
    ]);

    $this->load($params, '');

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

    // grid filtering conditions
    $query->andFilterWhere([
        'type' => $this->type,  
    ]);


    $query->andFilterWhere(['like', 'type', $this->type]);

    return $dataProvider;
}

按字符串值搜索时,我得到一个空结果。按整数值搜索将产生数据。

感谢您的帮助。谢谢。

2 个答案:

答案 0 :(得分:1)

也许最好在该列上进行过滤,而不是按字符串搜索。您可以按如下所示对字符串进行操作。

$filter = [
    'example1' => 1,
    'example2' => 2,
    'example3' => 3,
];

$query->andFilterWhere(['like', 'type', $this->filter[$this->type]);

或在这个地方

// grid filtering conditions
$query->andFilterWhere([
    'type' => $this->filter[$this->type],  
])

您还可以在列上创建过滤器下拉菜单,对于该过滤器的下拉列表,您可以传递此数组并执行

$query->andFilterWhere([
    'type' => $this->type,  
])

答案 1 :(得分:1)

为什么要在查询对象中创建映射机制?好的,您在应用程序的前端将整数类型显示为字符串,但查询中不应包含表示的详细信息。您应该在搜索模型中将字符串类型映射为整数类型。例如:

viewProviders: [{provide: ControlContainer, useExisting: NgForm}]

另一种方法是使用enum而不是映射。