下拉列表在yii中不起作用

时间:2014-01-08 10:08:19

标签: drop-down-menu html-select yii

事情是我有3个模型,其中调用了model1 model2的xyz(pid),它获取了包含该pid的所有id,知道model3具有(id,name)model2获取的id(model3 id的fk),我有循环它们,$ data应该存储名称,id和所有id的列表,名称必须出现在model1视图的下拉列表中

但我收到错误陈述

CDbCommand无法执行SQL语句:SQLSTATE [42S22]:找不到列:1054'where子句'中的未知列'Array'。执行的SQL语句是:

SELECT id,name
FROM table1
WHERE id = Array

model1

  public function myabcDropDown()
{
    $pid=Yii::app()->SESSION['pid'];

 $sid=model2::model()->xyz($pid);

foreach($sid as $val)   //line 0
{
    $data=model3::model()->pqr($val);
$data.=$data;

}
//line 1
$datalist=CHtml::listData($data,'id','name');
return $datalist;
}

在model3中的功能

public function pqr($val)
{
    $sql="SELECT id,name
FROM table1
WHERE id = ".$val;
$connection=Yii::app()->db;
  $command=$connection->createCommand($sql);
 $tts=$command->queryRow();
 $result=array();
  foreach($tts as $key=>$val1)
  {
$result[]=$val1;
 }
 return $result;
}

在model2中的功能

  public function xyz($pid);
{
    $sql="SELECT id
FROM table3
WHERE id = ".$pid;
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$tts=$command->queryAll();
$result=array();
foreach($tts as $key=>$val)
 {
$result[]=$val;
 }
return $result;
}

请帮助我失去理智

3 个答案:

答案 0 :(得分:0)

$result的{​​{1}}是一个行数组(而不是字段数组),而不是自xyz()使用以来的字段数组。请改用queryAll

答案 1 :(得分:0)

您需要了解 queryScalar(),因为它们可以帮助您;很多。现在查看你的代码你可以做到这一点

public function xyz($pid);
{
    $sql="SELECT id
FROM table3
WHERE id = ".$pid;
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$result=$command->queryColumn();
return $result;
}

然后

    public function myabcDropDown()
        {
             $data=array();
            $pid=Yii::app()->SESSION['pid'];

         $sid=model2::model()->xyz($pid);
    if(!empty($sid))
    {
  foreach($sid as $value)
{
$data[]=model3::model()->pqr($value);
}
       $datalist=CHtml::listData($data,'id','name');
        return $datalist;
    }
    else
    {
    throw new CHttpException('I got no result');
    }

        }

然后最后

public function pqr($val)
{
$criteria=new CDbCriteria;
$criteria->select='id,name';
$criteria->condition='id=:id';
$criteria->params=array(':id'=>$val);
$result=Table1::model->find($criteria);
return $result;
}

<强>信息: -
queryScalar() =如果您确定查询仅返回单个结果,则应使用它。它会让你摆脱阵列的麻烦。

queryColumn() =如果要在查询中选择单个列值,则应使用它。它将返回一维数组,从而使您摆脱多维数组的困扰。

答案 2 :(得分:0)

这有效

public function myabcDropDown()
{
  $pid=Yii::app()->SESSION['pid'];

$sid=model2::model()->xyz($pid);


$datalist=CHtml::listData($sid,'id','name');
return $datalist;
 }

 public function xyz($pid);
{

$sql="select id ,name from table1 where id IN (SELECT id
FROM table2
 WHERE pid = ".$pid.")";
 $connection=Yii::app()->db;
 $command=$connection->createCommand($sql);
 $tts=$command->queryAll();
 $result=array();
foreach($tts as $key=>$val)
 {
$result[]=$val;
}
return $result;
}

并且不再需要pqr()