如何在 Laravel 中通过驼峰命名法使用foreignId?

问题描述 投票:0回答:1

我有一张桌子

User
,里面有一个
id
。在另一个表(
AdminUser
)中,我想引用它,但是采用驼峰命名法。

但是,Laravel 不会转换它和/或识别用户表,因此当从另一个表请求用户时,它总是返回

null

我正在尝试一些东西,所以表格布局

User
AdminUser
可能很奇怪,但这不是问题的重点。

这是

AdminUser
表:

Schema::create('AdminUser', function (Blueprint $table) {
    $table->id();
    $table->foreign('userId');
    $table->integer('pin');
    $table->string('passcode');
    $table->timestamp('updatedAt');
    $table->timestamp('createdAt');
});

这是

User
表:

Schema::create('User', function (Blueprint $table) {
    $table->id();
    $table->string('username');
    $table->string('password');
    $table->enum('role', ['ADMIN', 'USER'])->default('USER');
    $table->string('loginToken')->nullable();
    $table->rememberToken()->nullable();
    $table->renameColumn('remember_token', 'rememberToken');
    $table->timestamp('createdAt');
    $table->timestamp('updatedAt');
});

如果我在

user_id
表中用
AdminUser
引用它,它可以正常工作,但我想了解如何使用驼峰式外键。

php mysql laravel
1个回答
0
投票

听起来您正在寻找使用外键的驼峰式大小写约定在 Laravel 中的表之间建立关系。 Laravel 确实有其表名和列名的约定,这是有充分理由的。但是,如果您正在尝试并想了解如何实现这一点,这里有一个专业的视角。

Laravel 的约定旨在增强跨项目的可读性和可维护性。在 Laravel 生态系统中工作时,遵守这些约定可以简化开发并使您的代码对于熟悉 Laravel 的其他开发人员来说更加直观。

不过,如果您想要这个,那么解决方案如下:

在 AdminUser 的迁移文件(考虑到您的模型名称是“AdminUser”)表中添加以下内容作为数据库级别关系:

$table->foreignId('userId')->constrained('User');

在您的用户模型中,为模型级别关系添加以下内容:

public function adminUser()
{
    return $this->belongsTo(User::class, 'userId', 'id');
}

在您的 AdminUser 模型中,为模型级别关系添加以下内容:

public function user()
{
    return $this->belongsTo(AdminUser::class, 'userId', 'id');
}
© www.soinside.com 2019 - 2024. All rights reserved.