Заглавная буква доступа к атрибуту Laravel игнорируется

я использую Lumen фреймворк. У меня есть одна проблема, мне нужно установить собственный атрибут доступа для атрибута, но проблема в том, что столбец в базе данных начинается с заглавной буквы.
Например Logo. И в случае первой заглавной буквы, средство доступа не вызывается при извлечении объекта, я пробовал с несколькими столбцами, столбцы с именами, начинающимися с маленькой буквы, работают отлично.

 public function getLogoAttribute($value)

Этот метод доступа не работает, потому что имя столбца Logo
Я не могу изменить имя столбца в базе данных, но мне нужно использовать средства доступа в моем приложении.
Я понимаю, что я могу изменить источники Eloquent рамки, но, может быть, есть какой-то другой способ заставить его работать.
Благодарю.

1

Решение

Я потратил несколько часов, пытаясь найти ответ в Интернете, но потом решил найти эту часть в коде самостоятельно.
Я нашел это.

Это находится в vendor/illuminate/database/Eloquent/Model
метод public function attributesToArray()

Измените часть этого метода следующим образом

 $mutatedAttributes = $this->getMutatedAttributes();

// We want to spin through all the mutated attributes for this model and call
// the mutator for the attribute. We cache off every mutated attributes so
// we don't have to constantly check on attributes that actually change.
foreach ($mutatedAttributes as $key) {
if (! array_key_exists($key, $attributes) ) {
if(array_key_exists(ucfirst($key), $attributes)) {
$key = ucfirst($key);
}
else {
continue;
}
}

Если у вас есть несколько заглавных букв в имени столбца, это не сработает.

Это плохое решение этой проблемы, просто назовите ваши столбцы базы данных в соответствии с соглашением, и у вас не возникнет никаких проблем (у меня есть возможность изменить имя столбца в моем случае).

ОБНОВИТЬ

Вы также можете изменить класс, как это

    /**
* Indicates if the model mutated attributes can have different case from ex. User_comments instead of user_comments.
*
* @var bool
*/
public $upperCaseMutatedAttributes = false;

if($this->upperCaseMutatedAttributes && array_key_exists(ucfirst($key), $attributes)) {
$key = ucfirst($key);
}

Вы можете переопределить эту переменную в своем классе.

1

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector