Php Yii2中kartik depdrop的第二级结果为空
这里我尝试使用kartik depdrop yii2扩展进行依赖下拉。此依赖下拉列表的过程是,如果我选择一个productname,它将显示依赖的batchno,如果选择一个batchno,它将显示依赖的itemid 实际上,第一个级别工作得很好,如果我选择一个productname,它会显示batchno,这个操作工作得很好,但是第二个级别的问题。如果我选择了一个batchno,它需要向我显示一个itemid,则此操作不起作用 当这张图片出现错误时- 控制器Php Yii2中kartik depdrop的第二级结果为空,php,yii2,Php,Yii2,这里我尝试使用kartik depdrop yii2扩展进行依赖下拉。此依赖下拉列表的过程是,如果我选择一个productname,它将显示依赖的batchno,如果选择一个batchno,它将显示依赖的itemid 实际上,第一个级别工作得很好,如果我选择一个productname,它会显示batchno,这个操作工作得很好,但是第二个级别的问题。如果我选择了一个batchno,它需要向我显示一个itemid,则此操作不起作用 当这张图片出现错误时- 控制器 public function a
public function actionSubcat() {
$out = [];
if (isset($_POST['depdrop_parents'])) {
$parents = $_POST['depdrop_parents'];
if ($parents != null) {
$cat_id = $parents[0];
$out = Productbatch::getBatchNo($cat_id);
echo Json::encode($out);
// the getSubCatList function will query the database based on the
// cat_id and return an array like below:
// [
// ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'],
// ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>']
// ]
//echo Json::encode(['output'=>$out, 'selected'=>'']);
return;
}
}
echo Json::encode(['output'=>'', 'selected'=>'']);
}
public function actionProd() {
$out = [];
if (isset($_POST['depdrop_parents'])) {
$ids = $_POST['depdrop_parents'];
$cat_id = empty($ids[0]) ? null : $ids[0];
$subcat_id = empty($ids[1]) ? null : $ids[1];
if ($cat_id != null) {
$data = Productbatch::getItemid($cat_id, $subcat_id);
/**
* the getProdList function will query the database based on the
* cat_id and sub_cat_id and return an array like below:
* [
* 'out'=>[
* ['id'=>'<prod-id-1>', 'name'=>'<prod-name1>'],
* ['id'=>'<prod_id_2>', 'name'=>'<prod-name2>']
* ],
* 'selected'=>'<prod-id-1>'
* ]
*/
echo Json::encode($out);
//echo Json::encode(['output'=>$out, 'selected'=>$data['selected']]);
return;
}
}
echo Json::encode(['output'=>'', 'selected'=>'']);
}
您需要在控制器中这样做。您必须在控制器中创建新操作
public function actionState() {
$country_id = $_POST['depdrop_parents'][0];
$state = State::find()->where(['country_id' => $country_id])->all();
$all_state = array();
$i = 0;
foreach ($state as $value) {
$all_state[$i]['id'] = $value['state_id'];
$all_state[$i]['name'] = $value['state_name'];
$i++;
}
echo Json::encode(['output' => $all_state, 'selected' => '']);
return;
}
我也遇到了这个问题,但最终我解决了这个问题。我想我的控制器中已经有了actionSubcat和actionProd。你能看看我的控制器并告诉我需要做什么修改吗?你需要创建一个数组并使用foreach将所有子类别存储在我的控制器中,并将其转换为json并返回。。我认为您的查询不起作用。请尝试以下操作:$model=User::find()->where(“productname=$cat\u id和batchno=$subcat\u id”)->all();尝试:$model=User::find()->where('productname=:productname',[':productname'=>$cat\u id])->和where('batchno=:batchno',[':batchno'=>$subcat\u id])->all();哈哈。。。最后找到它echo Json::encode($data)而不是echo Json::encode($out);在您的actionProd()中
public static function getBatchNo($cat_id)
{
$out = [];
$data = Productbatch::find()
->where(['productname' => $cat_id])
->asArray()
->all();
foreach ($data as $dat) {
$out[] = ['id' => $dat['itemid'], 'name' => $dat['batchno']];
}
return $output = [
'output' => $out,
'selected' => ''
];
}
public static function getItemid($cat_id, $subcat_id)
{
$out = [];
$data = Productbatch::find()
->where(['productname' => $cat_id])
->andWhere(['batchno' => $subcat_id])
->asArray()
->all();
$selected = '';
foreach ($data as $dat => $datas) {
$out[] = ['id' => $datas['itemid'], 'name' => $datas['itemid']];
if($dat == 0){
$aux = $datas['itemid'];
}
($datas['productname'] == $cat_id) ? $selected = $cat_id : $selected = $aux;
}
return $output = [
'output' => $out,
'selected' => $selected
];
}
public function actionState() {
$country_id = $_POST['depdrop_parents'][0];
$state = State::find()->where(['country_id' => $country_id])->all();
$all_state = array();
$i = 0;
foreach ($state as $value) {
$all_state[$i]['id'] = $value['state_id'];
$all_state[$i]['name'] = $value['state_name'];
$i++;
}
echo Json::encode(['output' => $all_state, 'selected' => '']);
return;
}