我有一张桌子
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
引用它,它可以正常工作,但我想了解如何使用驼峰式外键。
听起来您正在寻找使用外键的驼峰式大小写约定在 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');
}