Yii2:获取结果时Kartik Dependent Dropdown抛出错误

时间:2018-02-19 20:04:00

标签: yii2 yii2-basic-app

我正在使用DropDownlist一个select2和一个Depdrop with Yii2,

这是我的表格:

    <?php   $empresa = ArrayHelper::map(Companies::find()->all(),'company_id', 'company_name');
            echo $form->field($model, 'companies_company_id')->dropDownList($empresa, ['id'=>'company_id']); ?>

    <?php   echo $form->field($model, 'branches_branch_id')->widget(DepDrop::classname(), [
            'type'=>DepDrop::TYPE_SELECT2,
            'options'=>['id'=>'branch_id'],
            'select2Options'=>['pluginOptions'=>['allowClear'=>true]],
            'pluginOptions'=>[
                'depends'=>['company_id'],
                'placeholder'=>'Seleccionar sucursal...',
                'url'=> $base,
            ]
        ]);   
    ?>

这是我的模特:

public static function getBranches($branch_id)
{
    $data=Branches::find()
   ->where(['companies_company_id'=>$branch_id])
   ->select(['branch_id','branch_name'])->AsArray()->all();
    //$data2 = ArrayHelper::map($data, 'branch_id','branch_name');
    //var_dump($data[0]);
    //exit;
    if(empty($data))
    {
        return $data;
    }else
    {
        return $data[0];    
    }

}

这是我的控制者:

public function actionSubcat()
{
  $sucursal = [];
  if (isset($_POST['depdrop_parents'])) {
      $parents = $_POST['depdrop_parents'];

      if ($parents != null) {
          $id_branch = $parents[0];
          $Branch = new Branches();
          $sucursal = $Branch->getBranches($id_branch);
          //$Branch->getBranches($cat_branch);

          //ArrayHelper::map(Branches::find()->all(), 'branch_id', 'branch_name');

          //ArrayHelper::map(Branches::find()->all(), 'branch_id', 'branch_name');//self::getSubCatList($branch_id);

          echo Json::encode(['output'=>$sucursal, 'selected'=>'']);
          return;
        }
      }
      echo Json::encode(['output'=>[], 'selected'=>'']);
}

enter image description here

1 个答案:

答案 0 :(得分:0)

您需要更改模型function getBranches(),如果您看到DOCS它表示您需要按以下格式返回下拉列表的结果

// [
//    ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'],
//    ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>']
// ]

而你回来的东西没有任何意义

if(empty($data))
{
    return $data;
}else
{
    return $data[0];    
}

检查它是否为空后返回$data有什么意义?反正
您的功能应更改为以下内容,它将开始工作

public static function getBranches($branch_id)
    {
        $data=Branches::find()
       ->where(['companies_company_id'=>$branch_id])
       ->select(['branch_id','branch_name'])->all();

         $arr = [];
         foreach ($data as $branch) {
            $arr[] = ['id' => $branch->branch_id, 'name' => $branch->branch_name];
        }
        return $arr;
    }