PDO + Angular: как совместить DB underscore_case с верблюдом Angular?

У меня есть приложение AngularJs, которое подключается к базе данных, используя API-интерфейсы php PDO.

Это схема потока данных:

DB:
CREATE TABLE person (
...
first_name,
...
);

php API:
$stmt = $this->db->prepare("SELECT * FROM person");
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);
...
'first_name' => 'Alice',
...

angular service:
getPerson: function (id) {
return $http({
method: 'GET',
url: apiUri + 'get' + '/' + id,
}).then(handleSuccess, handleError);
},

angular controller:
Person.getPerson(id).then(function(person) {
var name = person.first_name; // this throws a jslint warning
});

Проблема в том, что рекомендуемый стандарт именования SQL — underscore_case, а Angular — camelCase …

Я не хотел бы отключать jslint, что очень полезно, в других отношениях …

Я знаю, что мог избежать предупреждений даже с

{
"camelcase": false
}

в .jshintrc, но я бы предпочел не отключать проверку верблюдов в глобальном масштабе …

В настоящее время я избегаю предупреждений jslint с помощью комментариев jslint следующим образом:

/* jshint camelcase: false */
var name = person.first_name;
/* jshint camelcase: true */

но мой код будет содержать больше комментариев jslint, чем код … Довольно нечитабельно …

Как вы (или вы) решить эту проблему?

0

Решение

Поскольку underscore_case не является обязательным для SQL, а camelCase является обязательным для Angular, можно использовать имена, подходящие для обеих сред. В этом случае camelCase приемлем с обоими.

За 40 с лишним лет программирования я никогда не думал, что underscore_case полезен. Я всегда предпочитал CamelCase. Переименуйте first_name в firstName, оно не только выглядит лучше, но и решит проблему.

РЕДАКТИРОВАТЬ

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

Идентификаторы должны быть не только значимыми, но и уникальными. Таким образом, при выборе соглашения об именовании необходимо учитывать среду, в которой работает

Windows

SQL не зависит от регистра, т. Е. NAME == name == Name == NaMe

Юникс

SQL чувствителен к регистру, т. Е. NAME! = Name! = Name! = NaMe

Майкл Лато рекомендует PascalCase для MS Server,
Oracle использует UPPER с подчеркиванием.
MySQL рекомендует ниже с подчеркиванием, НО это не обязательно Увидеть

НОТА

В Windows InnoDB всегда хранит имена баз данных и таблиц внутри нижнего регистра

0

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

Используйте объект, как если бы вы использовали массив: person['first_name']

1

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