如何在yii框架中将classname转换为classid并存储为DB

如何在yii框架中将classname转换为classid并存储为DB,yii,Yii,我正在使用yii框架开发应用程序,我有一个名为“studentinformation”的表,该表中有一些列,如 id name mothername phone classid parentname email 1. xxxxx asdf 9658741230 2 pqrs xy@gmail.com 还有一个叫做classname表的表 classid classname 1.

我正在使用yii框架开发应用程序,我有一个名为“studentinformation”的表,该表中有一些列,如

 id  name   mothername   phone        classid   parentname      email
 1.  xxxxx    asdf       9658741230     2         pqrs        xy@gmail.com 
还有一个叫做classname表的表

 classid  classname
    1.      class1
    2.      class2
    3.      class3
我将classid设置为外键,我尝试上载excel文件,而不是填写表单。这是我的excel格式数据

 id  name   mothername   phone         classid    parentname      email
 1.  xxxxx    asdf       9658741230     class1      pqrs      xy@gmail.com 
在上表中,我给出了classname而不是od classid,因为用户对classname感到满意,而不是classid,但我需要将classid存储到数据库中

在我的控制器中,我从excel文件中获取值,如

    $newmodel->name=$data[0];
        $newmodel->mothername=$data[1];
        $newmodel->phone=$data[2];
        //i am getting classname instead of classid  
        $classname=$data[11];
        //i need to convert from classname to classid 
       $classdet = Classdetails::model()->findAll(array("condition"=>"classname=>'$classname'"));
      foreach(classdet as $val)
      {
             $classid[] = $val->classid;
      }
   $newmodel->classid = $classid[0];

我没有得到正确的输出,您能帮我吗…

您的情况不正确,从
findAll
需要以下参数:

  • $condition
    (混合)
  • $params
    (数组)
  • 正如我在评论中建议的,尝试使用:

    $classdet = Classdetails::model()->findByAttributes(array("classname"=>$classname));
    
    它应该会起作用。 您的代码应该如下所示:

    $newmodel->name=$data[0];
    $newmodel->mothername=$data[1];
    $newmodel->phone=$data[2];
    $classname=$data[11];
    $classdet = Classdetails::model()->findByAttributes(array("classname"=>$classname));
    $newmodel->classid = $classdet->classid;
    //save or show your new model.
    
    $newmodel->name=$data[0];
    $newmodel->mothername=$data[1];
    $newmodel->phone=$data[2];
    $classname=$data[11];
    $classdet = Classdetails::model()->findByAttributes(array("classname"=>$classname));
    $newmodel->classid = 0;
    if($classdet){
        $newmodel->classid = $classdet->classid;
    }
    //save or show your new model.
    
    如果在数据库中找不到
    类名
    ,您可能需要加入一些逻辑。但我不知道这是否是一个有效的方案

    像这样:

    $newmodel->name=$data[0];
    $newmodel->mothername=$data[1];
    $newmodel->phone=$data[2];
    $classname=$data[11];
    $classdet = Classdetails::model()->findByAttributes(array("classname"=>$classname));
    $newmodel->classid = $classdet->classid;
    //save or show your new model.
    
    $newmodel->name=$data[0];
    $newmodel->mothername=$data[1];
    $newmodel->phone=$data[2];
    $classname=$data[11];
    $classdet = Classdetails::model()->findByAttributes(array("classname"=>$classname));
    $newmodel->classid = 0;
    if($classdet){
        $newmodel->classid = $classdet->classid;
    }
    //save or show your new model.
    
    这样,默认情况下,
    $newmodel->classid
    将设置为0。
    如果
    $classdet
    不是
    null
    ,它将设置正确的值

    为什么您得到的是
    $class->class->classid
    而不是
    $class->classid
    ?另外,尽量不要使用关键字
    class
    ,这很容易混淆,
    $classDetails
    会更好。@jelledefines我编辑了我的问题,请检查一下,让我知道它是否正确。好的,你可以使用
    find
    而不是
    findAll
    ,这样你只会得到一条记录。然后可以执行
    $classdet->classid
    而不是
    foreach
    循环。但是我看不出你的代码为什么不能工作。您得到的不希望的输出是什么?请尝试一个
    Classdetails::model()->findByAttributes(数组(“classname”=>$classname))
    ,因为您的条件很奇怪。我正按照您所说的那样尝试,但我得到了错误“尝试获取非对象的属性”必须做什么?好吧,这意味着您的
    $classdet
    null
    ,这意味着您要查找的
    $classname
    不存在于您的数据库中。是的,它工作正常,但如果我当时没有在excel文件中输入classname,它应该将classid存储为0如何执行我的最后一个问题我的classdetails中有状态和学校ID如果我想在$classdet=Classdetails::model()->findByAttributes(数组(“classname”=>$classname))中检查schoolid=1和status=1,则返回表;我需要做的就是将它们添加到数组中,就像我们使用
    $classname
    一样,如果您不确定,请阅读。