2015-04-29 43 views
1

我正在使用Yii框架開發應用,我有一臺名爲「studentinformation」,我有在該表中某些列像如何轉換類名,classid和存儲到在Yii框架DB

id name mothername phone  classid parentname  email 
1. xxxxx asdf  9658741230  2   pqrs  [email protected] 

和我也有一個多表名爲類名錶

classid classname 
    1.  class1 
    2.  class2 
    3.  class3 

我設置的classid爲外鍵,我試圖上傳Excel文件,而不是填表格。這是我的Excel格式數據

id name mothername phone   classid parentname  email 
1. xxxxx asdf  9658741230  class1  pqrs  [email protected] 
在上面的表格

我給類名,而不是OD的classid因爲用戶舒適的類名不僅沒有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]; 

我沒有得到正確的輸出,你可以幫我...

+0

爲什麼你得到'$ class-> class-> classid'而不是'$ class-> classid'?另外,儘量不要使用關鍵字'class',這很令人困惑,'$ classDetails'會更好。 –

+0

@JelledeFries我編輯我的問題只是檢查它,讓我知道它是否正確 –

+0

嗯,你可以使用'find'而不是'findAll',這樣你只能得到一個記錄。那麼你可以做'$ classdet-> classid'而不是'foreach'循環。但是我沒有看到你的代碼不能工作的原因。你得到的不想要的輸出是什麼? –

回答

2

你的條件是錯誤的,從docsfindAll希望以下參數:

  1. $condition(混合)
  2. $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. 

您可能希望把一些邏輯上,如果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 = 0; 
if($classdet){ 
    $newmodel->classid = $classdet->classid; 
} 
//save or show your new model. 

這樣你$newmodel->classid將被默認設置爲0。 如果您的$classdet不是null它將設置適當的值。

+0

我想按照你所說的,但我得到錯誤「試圖獲得非對象的財產」必須做什麼? –

+0

好吧,這意味着你的'$ classdet'是'null',這意味着你正在尋找的'$ classname'不存在於你的數據庫中。 –

+0

亞它是工作正常,但incase我沒有在我的Excel文件中輸入classname,它應該將classid存儲爲0如何做到這一點 –