Методы доступа к модели Laravel 5 не работают

Я пытаюсь написать некоторые методы доступа в соответствии с моей лучшей интерпретацией документации, и они, похоже, не работают. Я пытаюсь расшифровать атрибут, который зашифровываю, когда он поступает в базу данных через вызов API, который запускается с помощью запланированной команды консоли. У меня есть модель, которая выглядит так:

 <?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, а другой для атрибута с именем ACCOUNT_HOLDER. Когда я сохраняю как $ all = MasterPreference :: all () и dd ($ all) в моем методе индекса в MasterPreferencesController, эти атрибуты остаются неизменными. Есть ли еще один шаг к вызову этих методов доступа? Разве они не должны работать магией Ларавела?

Я ценю любую помощь! Я довольно озадачен и не могу найти это в документах.

0

Решение

Я предполагаю, что Laravel предполагает, что ваши имена полей в нижнем регистре. Если имя вашего поля было, например, custome_id это правильно изменило бы значение этого.

Вы также можете попробовать следующее:

public function getCustomerIdAttribute($)
{
return Crypt::decrypt($this->attributes['CUSTOMER_ID']);
}

или же

public function getCustomerIdAttribute($)
{
return Crypt::decrypt($this->CUSTOMER_ID);
}

затем получить доступ к этому значению с

MasterPreference::find($id)->customer_id

не уверен, если и что будет работать.

2

Другие решения

Давайте посмотрим, где волшебство пошло не так.

Основы:

1) Вы расширяете класс Illuminate\Database\Eloquent\Model, Функции, которые вы объявляете в MasterPreference class, переопределит функцию родительского класса, где имена совпадают.

Источник: http://php.net/manual/en/keyword.extends.php

Эта проблема:

MasterPreference класс пуст __construct функция.

Это отменяет __construct() функция Illuminate\Database\Eloquent\Model который:

/**
* Create a new Eloquent model instance.
*
* @param  array  $attributes
* @return void
*/
public function __construct(array $attributes = array())
{
$this->bootIfNotBooted();

$this->syncOriginal();

$this->fill($attributes);
}

Твоя магия Аксессоров & Мутаторы происходят в этом вихре кода.

Решение:

Следовательно, MasterPreference«s __construct должно быть следующим:

public function __construct(array $attributes = array())
{
parent::__construct($attributes);
}
2

По вопросам рекламы [email protected]