【问题标题】:Laravel 4 - Case Sensitive Database ColumnsLaravel 4 - 区分大小写的数据库列
【发布时间】:2014-01-19 19:51:18
【问题描述】:

嗨,我对大小写敏感的 eloquent 有问题,我正在开发可以使用 mysql 和 postgres 数据库的小程序,问题是如果我使用 mysql 一切都很好,但如果我使用 Postgressql,我必须更改列姓名改为数据库上的真实姓名。

Mysql Engine :
$clientsName = array_fetch ($clientsall, 'Name') ;
$clientsId = array_fetch ($clientsall, 'ClientId') ;

Postgres Engine:

$clientsName = array_fetch ($clientsall, 'name') ;
$clientsId = array_fetch ($clientsall, 'clientid') ;

如何更改为始终不需要区分大小写的数据库列名?

【问题讨论】:

  • 你能不能保持一组说小写并在需要时使用下划线分隔项目。 client_id,这将解决一个问题,就像我在遇到区分大小写的问题时所做的那样。
  • 问题是我访问 Bacula 的数据库 - Bacula.org,我没有控制该数据库,我认为 mysql 上的 bacula 创建列名称,如 clientid 和 Postgres 创建有客户 ID。所以我需要的是我可以通过 PHP:PDO 设置改变的东西来假设差异 -

标签: mysql database postgresql laravel case-sensitive


【解决方案1】:

您可以使用 MySQL 表示法将字段名称放入变量中。然后检查数据库引擎是 MySQL 还是 PostgreSQL。如果是 PostgreSQL,请执行 $fieldname = strtolower( $filedname )。例如:

$f_Name = 'Name';
$f_ClientID = 'ClientID';

if ( $postgres ) {
    $f_Name = strtolower($f_Name);
    $f_ClientID = strtolower($f_ClientID);
}

//Both Engines :
$clientsName = array_fetch ($clientsall, $f_Name) ;
$clientsId = array_fetch ($clientsall, $f_ClientId) ;

【讨论】:

  • 是的,这是我的好方法。谢谢
【解决方案2】:

Laravel 不负责数据库引擎的大小写敏感性。 MySQL 和 PostgreSQL 在这种情况下有不同的规则。

您有多种选择来编写更好的代码:

  1. 使用命名标准:Laravel Eloquent 属性和 SQL 列名应该是蛇大小写

  2. 使用 OOP 和 Eloquent getter 而不是解析原始 SQL 结果。 Eloquent 是一个抽象层,允许您使用相同的语法更改数据库引擎。

【讨论】:

  • 问题是我访问 Bacula 的数据库 - Bacula.org,我没有控制该数据库,我认为 mysql 上的 bacula 创建列名称,如 clientid 和 Postgres 创建有客户 ID。所以我需要的是可以通过 PHP:PDO 设置改变的东西来假设差异
  • 然后,您必须使用我建议的第二种解决方案:使用 OOP 抽象您的数据库访问。创建一个对象Client 并使用getter 访问它的属性。您可以像这样在 Eloquent 模型中构建自定义 getter:laravel.com/docs/eloquent#accessors-and-mutators。如果没有关于您的用例的更多信息,我不能说更多。
  • 我会尝试这种方法。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-24
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 2014-02-15
相关资源
最近更新 更多