Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将bool显示为复选框列表并按其进行搜索?_Php_Yii2 - Fatal编程技术网

Php 如何将bool显示为复选框列表并按其进行搜索?

Php 如何将bool显示为复选框列表并按其进行搜索?,php,yii2,Php,Yii2,我有一个DB/model字段,它有一个可为null的bool类型(它是布尔型的,但可以为null)。在ActiveForm或GridView中将其作为单个字段显示并按其进行搜索没有问题: $query->andFilterWhere(['is_manager' => $this->is_manager,]); 但是当它必须显示为两个复选框时,如何在ActiveForm中显示它,以便在元素的列表中进行搜索?例如: 因此,客户可以选择以下选项: 用户是经理 用户不是经理 两者

我有一个DB/model字段,它有一个可为null的bool类型(它是布尔型的,但可以为null)。在
ActiveForm
GridView
中将其作为单个字段显示并按其进行搜索没有问题:

$query->andFilterWhere(['is_manager' => $this->is_manager,]);
但是当它必须显示为两个复选框时,如何在
ActiveForm
中显示它,以便在元素的列表中进行搜索?例如:

因此,客户可以选择以下选项:

  • 用户是经理
  • 用户不是经理
  • 两者
  • 没有一个

UPD:我试着解释一下:这是一个由列表用户进行的搜索,而不是由一个用户进行的搜索。所以结果可以包含这两个选项,例如用户1是经理,用户2-不是经理。如果我选中两个复选框,结果将同时显示这两个复选框。如果检查其中一个,结果将显示其中一个。

很抱歉我反应太晚,我不得不离开一会儿。好的,你是对的,四个可能的答案在搜索的情况下是有意义的。在我看来,在这种情况下,两个复选框代表一个布尔值。我们叫他们,
是管理者,
不是管理者。如果布尔值为
false
则不应用任何过滤器,否则为。在PHP代码中:

if ($this->is_manager) $query->andFilterWhere(['is_manager' => 'true']);
if ($this->is_not_manager) $query->andFilterWhere(['is_manager' => 'false']);
这里的假设是,
$this->is_manager
$this->is_not_manager
表示复选框中的两个布尔值

这对您有意义吗?

如前所述: 我能想到的只有3种状态(在现实生活中): 一个人是:

  • 不是经理(否)
  • 经理(是的)
  • 未确定(空)
  • 对于搜索,可以方便地选择“不在乎我”

    我建议在搜索表单中显示以下内容:

    • 是(值“1”)
    • 否(值“0”)
    • 待定(值“空”)
    • 无所谓(值“”)
    在php中,您可以将这些搜索选项转换为将字段分别与1、0、null和no comparison进行比较,以防出现“无关紧要”的情况。 我假设数据库中a字段
    的tinyint(1)为空,即a管理器

    ,结果如下:


    在主模型中,我创建了一个虚拟财产:

    public $isManagerArray = [];
    
    搜索模型中
    我添加了一条规则:

    public function rules() {
        return [
            ['isManagerArray', 'in', 'range' => [true, false]],
        ];
    }
    
    search
    方法中,我添加了一个条件:

    public function search($params) {
        ....
    
        if (count($this->isManagerArray) > 1) {
            $query->where(['AND',['OR',[ 'is_manager' => true],['is_manager' => false]]]);
        } else if (count($this->isManagerArray) > 0) {
            $query->andFilterWhere([ 'is_manager' => $this->isManagerArray[0] ]);
        }
    
        ...
    }
    
    我的
    \u search.php
    视图文件具有:

    <?php $form = ActiveForm::begin(); ?>
    
    <?= Html::checkboxList($model->formName().'[isManagerArray]', null, [1 => 'Yes', 0 => 'No']); ?>
    
    <?php ActiveForm::end(); ?>
    
    
    


    如果有更好的解决方案,请分享

    谢谢您的回答。我决定做一个虚拟财产和它的工作评论是不为延长讨论;这段对话已经结束。如果需要更多信息,请务必回答您的问题。