Как заставить laravel использовать camelCase для имен столбцов

Larvel использует snake_case для имени столбцов таблицы. Как переписать это предположение так, как работает следующий геттер?

public function getFooBarAttribute()
{
return json_decode($this->attributes['fooBar'], true);
}

4

Решение

Я должен сначала предупредить этот ответ следующим: я не проверял этот код; во-вторых, у меня никогда не было требования использовать это.

С учетом сказанного, на eloquent моделях доступно статическое свойство:

/**
* Indicates whether attributes are snake cased on arrays.
*
* @var bool
*/
public static $snakeAttributes = true;

Переключив это значение на false, вы отключаете змеиную оболочку имен атрибутов И имен отношений в модели. Это должно иметь желаемый результат, который вы ищете.

Если вы заинтересованы исходный код для модели есть метод cacheMutatedAttributes который запускает регулярное выражение среди атрибутов, чтобы проверить, присутствуют ли какие-либо мутации, если они совпадают, выполняется через следующий фрагмент.

if (static::$snakeAttributes) {
$match = Str::snake($match);
}

Поскольку это статическое свойство, вы можете глобально изменить его для всех моделей, изменив статическое значение на самой модели. В противном случае вы можете внести это изменение для каждой модели, переписав статическое значение в каждой модели, в которой оно вам необходимо. Чтобы изменить глобально, вы можете добавить что-то вроде этого в свой AppServiceProvider:

public function boot()
{
\Illuminate\Database\Eloquent\Model::$snakeAttributes = false;
}
7

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

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

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