【问题标题】:PDO + Angular: how to reconcile DB underscore_case with Angular's camelCase?PDO + Angular:如何协调 DB underscore_case 与 Angular 的 camelCase?
【发布时间】:2015-04-26 08:21:38
【问题描述】:

我有一个 AngularJs 应用程序,它使用 php PDO API 连接到数据库。

这是示意图数据流:

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 cmets”的 jslint 警告:

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

但是我的代码将包含比代码更多的 jslint cmets...非常不可读...

你(或者你会)如何解决这个问题?

【问题讨论】:

    标签: php angularjs pdo camelcasing


    【解决方案1】:

    像使用数组一样使用对象:person['first_name']

    【讨论】:

    • line 121 col 19 ['first_name'] 最好用点表示法。
    • 嗯。最好的方法是创建一个包含字段名称的变量。 var firstName = 'first_name'; person[firstName] 不是最好的,但我猜比禁用 jshint 要好。
    • 我同意,不是最好的... :-)
    【解决方案2】:

    因为 underscore_case 在 SQL 中不是强制性的,而 camelCase 在 Angular 中是强制性的,所以使用适合这两种环境的名称是明智的。在这种情况下,camelCase 两者都可以接受。

    在 40 多年的编程生涯中,我从没想过 underscore_case 有用。我一直更喜欢camelCase。将 first_name 重命名为 firstName 不仅看起来更好,而且可以解决问题。

    编辑

    标准 SQL 中的列名可以由字母、下划线和 以字母开头的数字。 SQL 允许您在名称中使用空格、保留字和特殊字符(如果将它们括在双引号中)。

    标识符不仅必须有意义,而且必须是唯一的。因此,在选择命名约定时,必须考虑操作环境

    Windows

    SQL 不区分大小写,即 NAME == name == Name == NaMe

    Unix

    SQL 区分大小写,即 NAME != name != Name != NaMe

    Michael Lato 推荐用于 MS Server 的 PascalCase, Oracle 使用带下划线的 UPPER。 MySQL 建议用下划线降低,但这不是强制性的See

    注意

    在 Windows 上,InnoDB 总是在内部以小写形式存储数据库和表名

    【讨论】:

    • 您确定命名 SQL 字段不会违反任何 SQL“标准”吗?我(几乎)总是看到 SQL 表/字段名称 underscore_case ...
    • From "stackoverflow.com/questions/14317784/…: "(ANSI) SQL 标准要求不带引号的标识符以全部大写形式存储在系统目录中,并且不带引号的标识符不区分大小写。”!!!不过我找不到更权威的来源...
    • 好的。因此,您提出的答案(将 camelCase 用于 SQL 标识符)是可移植的,因为 - 例如 - 在 Windows 上,“aColumn”应该与“acoLumn”混淆,这是一个非常危险的情况……对吧?
    • 在 SQL 中的标识符应该是有意义的。 “acoLumn”是什么意思?你会在同一张表中有“aColumn”和“acoLumn”吗?
    • 目标是将 Angular 中使用的 1 对 1 名称与 DB 名称进行映射。由于 Angular 区分大小写,是的,“aColumn”和“acoLumn”是两个不同的变量,因此应该在 DB 上,以授予 1 对 1 映射。事实并非如此。现在,我的例子不是很清楚......你可以考虑“bithday”和“birthDay”......这些名称可以合法地引用不同的javascript对象,但应该在数据库端混淆......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2021-03-31
    • 1970-01-01
    • 2020-07-13
    • 2014-07-01
    • 2013-03-22
    相关资源
    最近更新 更多