我想清楚地解释一下我的问题,
我正在尝试执行多选下拉过滤器,在此多选过滤器之前我有一个基本过滤器。
使用kartik-v下拉扩展程序
的search.php
<?php
$status = ArrayHelper::map(Status::find()->all(),'id','status');
echo $form->field($model, 'status')->widget(Select2::classname(), [
'data' => $status,
'language' => 'en',
'options' => [
'placeholder' => 'Select Status..',
'multiple' => true
],
'pluginOptions' => [
'allowClear' => true
],
]);
?>
claimsSearch.php
$query->andFilterWhere([
'status' => $this->status
]);
如果我尝试上面的代码,则会出现以下错误
Array to string conversion
但是我不知道如何编写过滤器代码。
答案 0 :(得分:4)
尝试删除状态&#39;来自EmployeeSearch规则。 你无法过滤这种现场自动方式。 或者您必须为状态列设置自定义过滤器值,如下所示(您可以深入了解此方向):
How can I use a simple Dropdown list in the search box of GridView::widget, Yii2?试试这个链接
答案 1 :(得分:0)
您没有在该窗口小部件中调用模型。你应该像这样使用:
echo $form->field($mySearchModel, 'state_10')->widget(Select2::classname(), [
'data' => $status,
'options' => [
'placeholder' => 'Select Status ...',
'multiple' => true
],
]);
你选择它可能会返回一个数组。所以,你的搜索将是这样的:
$query->andFilterWhere([
'status' => ('in', 'status', $this->status)
]);
查看更多查询示例here。
如果该解决方案不起作用,我会在您的视图中为您做var_dump($yourModel->status)
,只是为了检查返回的内容。
答案 2 :(得分:0)
$ this-&gt; status是数组吗?
所以,你可以使用
<?php
$status = ArrayHelper::map(Status::::model()->findAllByAttributes(array("id"=>$status));(),'id','status');
echo $form->field($model, 'status')->widget(Select2::classname(), [
'data' => $status,
'language' => 'en',
'options' => [
'placeholder' => 'Select Status..',
'multiple' => true
],
'pluginOptions' => [
'allowClear' => true
],
]);
?>