【问题标题】:How can I change database name conventions in Laravel?如何更改 Laravel 中的数据库名称约定?
【发布时间】:2022-01-09 18:04:07
【问题描述】:

我想更改我的 Laravel 应用程序中的默认数据库命名约定。默认情况下,Laravel 对数据库表名和列名使用蛇形大小写。但我想对表名使用 Pascal Case,我想对字段使用 Camel Case。

所以表名是Users而不是users,字段名是createdAtupdatedAtdeletedAt而不是created_atupdated_atdeleted_at

我知道我可以使用 $table 属性在每个模型的基础上更改这些,但我想更改默认值而不必修改每个模型。

Laravel 中有Symfony's NamingStrategy 之类的设置吗?

【问题讨论】:

  • 你不需要改变它做事的任何方式......只有当你没有配置时才会使用约定......所以对于模型你可以定义它使用的表,对于关系,您可以定义键和表(多对多)、时间戳等......不知道还有什么问题......您可以拥有自己的基础模型,您可以自定义并让您的模型从

标签: php laravel eloquent


【解决方案1】:

如果您查看Illuminate\Database\Eloquent\Model::getTable() 的代码,它非常简单:

public function getTable()
{
    return $this->table ?? Str::snake(Str::pluralStudly(class_basename($this)));
}

Illuminate\Database\Eloquent\Concerns\HasTimestamps::getCreatedAtColumn() 也一样:

public function getCreatedAtColumn()
{
    return static::CREATED_AT;
}

因此,创建您自己的扩展 Model 的类并覆盖该行为:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model as BaseModel;
use Illuminate\Support\Str;

class Model extends BaseModel
{
    const CREATED_AT = 'createdAt';
    const UPDATED_AT = 'updatedAt';
    const DELETED_AT = 'deletedAt';

    public function getTable()
    {
        return $this->table ?? Str::pluralStudly(class_basename($this));
    }
}

现在,让你的模型扩展这个类。

【讨论】:

    【解决方案2】:

    您可以为此使用stubs。此外,如果您在 Pascal Case 中命名您的表,只需在模型中使用需要与该表同步的 $table 属性。

    【讨论】:

    • 例如?! (创建类似于 OP 要求的命令的命令是什么)。
    【解决方案3】:

    您可以创建一个用于扩展模型的新模型。

    <?php
    
    namespace App\Models;
    
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Support\Str;
    
    class ModelWithPascalCase extends Model
    {   
        const DELETED_AT = 'deletedAt';
        const CREATED_AT = 'createdAt';
        const UPDATED_AT = 'updatedAt';
    
        public function getTable()
        {
            return $this->table ?? Str::pluralStudly(class_basename($this));
        }
    }
    

    如果你想让 Laravel 生成扩展它的模型,你可以通过编辑存根来实现。

    运行

    artisan stub:publish
    

    然后编辑stubs/model.stub,将Model 替换为您的ModelWithPascalCase

    之后,当你运行时

    artisan make:model User
    

    你的User 模型被ModelWithPascalCase 扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-19
      • 2018-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多