如何在 Eloquent 中取回小写的列名?

Roh*_*han 2 php laravel eloquent laravel-5

我正在使用一个包含所有大写蛇形列名称的数据库,当我使用 eloquent 获取它们时,我会执行以下操作:

    foreach($data as $key => $item){
        $data[$key] = array_change_key_case($item);
    }
Run Code Online (Sandbox Code Playgroud)

这使得键,即列名变成小写,但很快就会变得效率低下,因为我也需要像这样嵌套数组:

    foreach($tasks as $key => $task){
        foreach($task['users'] as $innerKey => $user){
            $task['users'][$innerKey] = array_change_key_case($user);
        }
        $tasks[$key] = array_change_key_case($task);
    }
Run Code Online (Sandbox Code Playgroud)

而且我无法更改数据库。有没有办法让我雄辩地将列名以小写形式返回给我?

bis*_*hop 7

您可以使用 PDO 属性在驱动程序级别转换列名称。为此,请设置您的app/config/database.php像这样Laravel 连接选项(在 中):

return array(
    'connections' => array(
        'mysql' => array(
            'options'   => array(
                PDO::ATTR_CASE => PDO::CASE_LOWER,
            ),
        ),
     )
)
Run Code Online (Sandbox Code Playgroud)

默认情况下PDO::CASE_NATURAL,这就是为什么你的代码将它们视为数据库已存储他们。


更新:如果你使用 MySQL,你可以考虑设置 lower_case_table_names = 2,它告诉服务器:

如果设置为 2,则表名按给定存储,但以小写形式进行比较。此选项也适用于数据库名称和表别名。