2016-01-06 52 views
1

即時通訊在PHP OOP中相當新穎,而使用laravel即時通訊有我的選擇框架。我創建一個對象用戶並創建記錄,我唯一需要做的就是檢查是否有一個輸入字段(不是必需的)被設置,如果它設置比我必須添加在用戶對象,但如何我可以添加此屬性(手機)和價值在退出的對象,我做對了嗎?在對象數組中添加屬性和值

代碼:

$user = User::create([ 
    'email'    => $userDat['email'], 
    'name'    => $userDat['name'], 
    'surname'   => $userDat['surname'], 
]); 

if (isset($userDat['mobilephone'])) { 
    $user->mobilephone = $userDat['mobilephone']; 
} 

回答

0

如果你絕對必須的屬性添加到對象,我相信你可以將它轉換爲一個數組,添加你的財產(如一個新的數組鍵),然後將它轉換回作爲一個對象。唯一一次碰到stdClass對象(我相信)是當你把一個數組作爲一個對象,或者當你從頭開始創建一個新的stdClass對象時(當然,當你使用json_decode()的時候 - 愚蠢的我忘了!)。

相反的:

$foo = new StdClass(); 
$foo->bar = '1234'; 

你會怎麼做:

$foo = array('bar' => '1234'); 
$foo = (object)$foo; 

或者,如果你已經有了一個現有的stdClass的對象:

$foo = (array)$foo; 
$foo['bar'] = '1234'; 
$foo = (object)$foo; 

亦作1個襯墊:

$foo = (object) array_merge((array)$foo, array('bar' => '1234')); 

或者,也許你可以這樣來做

$user->{'mobilephone'} = $userDat['mobilephone']; 
0

有是你可以做的幾種方法。

準備陣列提前

$data = [ 
    'email'    => $userDat['email'], 
    'name'    => $userDat['name'], 
    'surname'   => $userDat['surname'], 
]; 

if ($phone = array_get($userDat, 'mobilephone')) { 
    $data['mobilephone'] = $phone; 
} 

User::create($data); 

或者先創建對象,然後將其保存

$user = new User([ 
    'email'    => $userDat['email'], 
    'name'    => $userDat['name'], 
    'surname'   => $userDat['surname'], 
]); 

if ($phone = array_get($userDat, 'mobilephone')) { 
    $user->mobilephone = $phone; 
} 

$user->save(); 

由於您目前,但有一個額外的查詢(不明智)

$user = User::create([ 
    'email'    => $userDat['email'], 
    'name'    => $userDat['name'], 
    'surname'   => $userDat['surname'], 
]); 

if ($phone = array_get($userDat, 'mobilephone')) { 
    $user->mobilephone = $phone; 

    $user->save(); 
} 
0

如何添加此屬性(手機)a nd在退出對象中的值,我做對了嗎?

這很大程度上取決於您使用的框架。一般來說,你可以爲PHP中的任何對象添加任意屬性(這並不意味着你總是應該)。

在你的情況,你使用的是Eloquent框架多數民衆贊成隨Laravel,這實際上上動態分配的對象屬性取決於和使用它絕對正確。這在official documentation中有詳細記錄。請注意,您可能需要在某個時刻撥打$user->save()才能真正保存您的用戶對象(感謝Ben的提示)。

注意或者,您可以指定所有性質的User實例的那樣:如果OP不希望持久對象上的變化

$user = new User(); 
$user->email = $userDat['email']; 
$user->name = $userDat['name']; 
$user->surname = $userDat['surname']; 

if (isset($userDat['mobilephone'])) { 
    $user->mobilephone = $userDat['mobilephone']; 
} 

$user->save(); 
+0

大膽絕對正確是唯一真正的。否則,你也需要調用'$ user-> save()'。 –

+0

由於OP沒有明確提出這個問題,所以我認爲持久性是超出範圍的。 – helmbert

+0

事實上,不過,鑑於數據來自「輸入字段」,而其他數據則被保存,所以有理由認爲它需要被保留,因此值得一提。 –