2017-05-08 82 views
0

我使用Laravel的賦值函數功能,我有以下的賦值函數:Laravel忽略存取器

public function setFirstNameAttribute($value) 
{ 
    $this->attributes['first_name'] = strtolower($value); 
} 

不過,我需要忽略此賦值函數在某些情況下。 有沒有辦法實現這個

+0

如果不總是需要這個功能,當然它應該被移動到需要的地方,並刪除了突變的功能? –

回答

3

設置一個公共變量模型,如:$ preventAttrSet

public $preventAttrSet = false; 

public function setFirstNameAttribute($value) { 
    if ($this->preventAttrSet) { 
     // Ignore Mutator 
     $this->attributes['first_name'] = $value; 
    } else { 
     $this->attributes['first_name'] = strtolower($value); 
    } 
} 

現在需要根據個人情況

$user = new User; 
$user->preventAttrSet = true; 
$user->first_name = 'Sally'; 
echo $user->first_name; 
0

您可以設置該屬性本身:

$model->attributes['first_name'] = 'New First Name With Capitals'; 

這繞過了存取器。

+0

PS。我必須同意奈傑爾仁所做的評論。如果你並不總是需要mutator,那麼看看你是否可以重新設計你的流程,因爲mutators用於總是改變數據。 –

1

到忽略賦值函數時,你可以設置公共變量設置爲true而問題的答案提供似乎有效,Laravel有一種方法可以訪問原始值:

$service->getOriginal('amount') 

看到這個帖子: Example of getOriginal()

API: API Documentation