我試圖根據我對文檔的最佳解釋來編寫一些訪問器方法,但他們似乎沒有工作。我試圖解密一個屬性,當它通過調用artisan console命令觸發的API調用進入數據庫時,我正在進行加密。我有一個模型,看起來像這樣:Laravel 5模型訪問器方法不起作用
<?php namespace App;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
use ET_Client;
use ET_DataExtension;
use ET_DataExtension_Row;
use Crypt;
//child implementation
class MasterPreference extends Model {
////these fields can be mass assigned
protected $fillable = [
//
'SMS_OPT_IN',
'EMAIL_OPT_IN',
'CUSTOMER_NAME',
'CUSTOMER_ID'
];
protected $DE_Names = ['MasterPreferences', 'SubPreferences'];
protected $results = '';
//instantiate and replicate
function __construct()
{
}
/**
*
*
* @return $getResult
*/
public function getData()
{
}
/**
* store to the Db
*/
public function store($results)
{
}
/**
* decrypt CUSTOMER_ID
* @param $value
* @return mixed
*/
public function getCustomerIdAttribute($value)
{
return Crypt::decrypt($value);
}
public function getAccountHolderAttribute($value)
{
return $value . 'testing';
}
/**
* ecnrypt Customer ID
*
* @param $value
*/
public function setCustomerIdAttribute($value)
{
$this->attributes['CUSTOMER_ID'] = Crypt::encrypt($value);
}
}
正如你可以看到上面我已經創建了2種存取方法一個名爲CUSTOMER_ID的屬性,另外一個名爲ATTRIB ACCOUNT_HOLDER。當我在MasterPreferencesController的索引方法中存儲$ all = MasterPreference :: all()和dd($ all)時,這些屬性保持不變。是否有另一個步驟來調用這些訪問器方法?難道他們不應該靠Laravel的魔力來工作嗎?
我感謝任何幫助!我相當難過,無法在文檔中找到它。
你們都在一定程度上都是正確的。我昨天晚上意識到,如果直接分配屬性而不是將所有東西都拉出模型,那麼魔法的確會發生。像:'//查看它們 $ all = MasterPreference :: all(); $ idArray = array(); //值被訪問者解密 foreach($ all爲$ k => $ val){ $ idArray [] = $ val-> customer_id; '但是也是空白的構造函數是一個問題。 – funkenstein
是的,他們故意被稱爲'accessor'。你必須訪問它們才能發生魔法。即使你調用'toArray()'或'toJson()',訪問函數也會被應用。 – Mysteryos
謝謝!你們都非常有幫助! – funkenstein