2017-06-01 55 views
0

我想到動態模型創建或更新模型。
假設我有一個這樣的數組:Laravel迭代數組並寫入關係模型

$data = array(
'first_name' => 'Max', 
'last_name' => 'Power', 
'invoiceAddress.city' => 'Berlin', 
'invoiceAddress.country_code' => 'DE', 
'user.status_code' => 'invited' 
); 

現在我想遍歷數組,並寫入數據到一個模型,其中點號告訴我,我必須寫一個關係。

普通代碼:

$model->first_name = $data['first_name']; 
$model->last_name = $data['last_name']; 
$model->invoiceAddress->city = $data['invoiceAddress.city']; 

等。

我寧願一個更加動態的方式:

foreach($data as $key => $value){ 
    $properties = explode('.',$key); 
    //Now the difficult part 
    $model[$properties[0]][$properties[1]] = $value; 
    //Would work for invoiceAddress.city, 
    //but not for first_name 
} 

這裏的問題是,我不知道有多少屬性的爆炸將創建。 有沒有辦法以動態的方式解決這個問題?

回答

3

您可以使用Illuminate\Support\Arr助手從Laravel是這樣的:

foreach($data as $key => $value) { 
    Arr::set($model, $key, $value); 
} 

它的工作原理,因爲Arr類使用點符號訪問類的屬性:

Arr::get($model, 'invoiceAddress.country_code'); 

相當於:

$model['invoiceAddress']['country_code']; 

如果你喜歡使用更清潔的幫手:

foreach($data as $key => $value) { 
    array_set($model, $key, $value); 
} 
+0

先生,你是個天才! 它的工作方式正是我想要的。謝謝 :) – IFR