2016-05-01 107 views
0

我正在使用PHP和laravel框架创建一个Web应用程序。我的代码中有以下类。使用PHP和laravel框架在MySql数据库中存储对象数组

class ReportField extends Model 
{ 
    // 
    public $name; 
    public $quantity; 
    public $unitCost; 
    public $totalCost; 
    public $estimation; 
} 

我使用序列化将这些对象的数组写入数据库。

$fieldsList=array(); 
foreach($items as $item){ 
     if($item->sale_type == 1){ 

       $reportField=new ReportField(); 
       $reportField->name=$item->item_name; 
       $reportField->unitCost=$item->unit_cost; 
       array_push($fieldsList,serialize($reportField)); 
     } 
} 

$gpForecast=new GPForecast(); 
$gpForecast->project_id=$project_id; 
$gpForecast->fieldList=(serialize($fieldsList)); 
$gpForecast->save(); 

现在反序列化之后,我想将数组中的那些对象转换回RecordField对象。

$gpForecast=GPForecast::all()->first(); //here i read one of array i write to database 
$fieldList=unserialize($gpForecast->fieldList); 
foreach($fieldList as $field){ 
     echo $field->name; 
} 

但后来我得到错误Trying to get property of non-object那么我该如何纠正这个问题?

+0

难道你不应该为你的模型属性使用'protected $ fillable'吗? – haakym

回答

1

这个:array_push($fieldsList,serialize($reportField)我觉得如果你在做迭代后做$gpForecast->fieldList=(serialize($fieldsList)); 没用。这也可能导致大公你得到空项 - 在这里:

foreach($fieldList as $field){

你试图去序列化的数据

(在这里你它们序列:array_push($fieldsList,serialize($reportField));)。

这意味着你不会得到ReportField对象,但可能序列化数据。

相关问题