如何在Laravel中更改数据库名称约定?

eagi6jfj  于 2023-04-07  发布在  其他
关注(0)|答案(3)|浏览(151)

我想在我的Laravel应用程序中更改默认的数据库命名约定。默认情况下,Laravel使用snake case作为数据库表和列名。但我想使用Pascal Case作为表名,我想使用camel Case作为字段。
因此,表名为Users而不是users,字段名为createdAtupdatedAtdeletedAt而不是created_atupdated_atdeleted_at
我知道我可以使用$table属性在每个模型的基础上更改这些属性,但我想更改默认值,而不必修改每个模型。
Laravel中是否有类似Symfony's NamingStrategy的设置?

fcipmucu

fcipmucu1#

如果你看一下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));
    }
}

现在,只需让模型扩展App\Models\Model而不是Illuminate\Database\Eloquent\Model

dgiusagp

dgiusagp2#

你可以使用stubs来实现。如果你用Pascal Case命名你的表,只需要在model中使用$table属性,它需要与那个表同步。

nzkunb0c

nzkunb0c3#

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

<?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

您将得到由ModelWithPascalCase扩展的User模型。

相关问题