如何在yii框架中将classname转换为classid并存储为DB
我正在使用yii框架开发应用程序,我有一个名为“studentinformation”的表,该表中有一些列,如如何在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.
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
一样,如果您不确定,请阅读。