2016-02-14 2 views
4

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

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

Ик ... почему вы хотите его :) – Mfoo

ответ

7

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

С учетом сказанного, есть статическое свойство доступно на красноречивые модели:

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

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

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

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

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

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

Спасибо, я использую Laravel 5.3 и его работы –

+1

@David: Я хочу все поля данных, возвращаемые моделью в случае с верблюдом. Как мне это достичь? –

+0

это еще лучшая версия, после чего я получил час назад на SO Спасибо: D –

Смежные вопросы