Yii2:Kartik Dependent Dropdown 在获取结果时抛出错误
Yii2: Kartik Dependent Dropdown throwing error when fetching results
我在 Yii2 中使用 DropDownlist、select2 和 Depdrop,
这是我的表格:
<?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'=>'']);
}
您需要更改您的模型 function getBranches()
,如果您看到 DOCS
它说您需要 return 以下格式的下拉列表结果
// [
// ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'],
// ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>']
// ]
而您 return 没有任何意义
if(empty($data))
{
return $data;
}else
{
return $data[0];
}
在检查它是否为空后 returning $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;
}
我在 Yii2 中使用 DropDownlist、select2 和 Depdrop,
这是我的表格:
<?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'=>'']);
}
您需要更改您的模型 function getBranches()
,如果您看到 DOCS
它说您需要 return 以下格式的下拉列表结果
// [
// ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'],
// ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>']
// ]
而您 return 没有任何意义
if(empty($data))
{
return $data;
}else
{
return $data[0];
}
在检查它是否为空后 returning $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;
}