laravel - laravel 雄辩的一对一关系
问题描述
我有一个像这样的 Laravel 迁移
usergroups:
Schema::create('usergroups', function (Blueprint $table) {
$table->integer('id')->primary();
$table->string('name');
$table->string('slug');
});
users:
Schema::create('users', function (Blueprint $table) {
$table->integer('nik')->primary();
$table->string('name');
$table->string('username');
$table->string('password');
$table->string('telp', 15);
$table->integer('usergroup_id');
$table->rememberToken();
$table->timestamps();
});
Schema::table('users', function ($table) {
$table->foreign('usergroup_id')->references('id')->on('usergroups')->onDelete('cascade');
});
User
模型
public function group()
{
return $this->belongsTo(Usergroup::class, 'id');
}
Usergroup
模型
public function user()
{
return $this->hasMany(User::class, 'usergroup_id');
}
我用这个得到空白数据
$petugas = User::find(1);
return $petugas->group;
任何人帮助我,请...
解决方案
首先,这不是一对一的关系。这是一对多的关系。根据迁移文件,您以错误的方式建立关系。
关系代码块应如下所示。
public function group()
{
return $this->hasMany(Usergroup::class);
}
public function users()
{
return $this->belongsTo(User::class);
}
更多信息:
在您的情况下,可能有两个可能的事实。
- 一个用户有很多组,但一个组只属于一个用户。
- 一个组有很多用户,但一个用户只属于一个组。
事实 1:在这种情况下,外键列应该放在组表中。要遵循约定,请user_id
在groups
表中创建外部列名。代码应该是这样的
public function groups()
{
return $this->belongsTo(Usergroup::class);
}
public function user()
{
return $this->hasMany(User::class);
}
事实 2:在这种情况下,外键列应该放在 users 表中。为了遵循约定,使表中的外部列名group_id
和users
关系代码应该如下所示
public function group()
{
return $this->hasMany(Usergroup::class);
}
public function users()
{
return $this->belongsTo(User::class);
}
推荐阅读
- node.js - “对象承诺”而不是值 node.js
- powershell - 从 get-childitem 搜索中排除路径
- react-native - 反应原生模型弹出样式问题
- android - 有没有办法将标签放在 Flutter 的抽屉中?
- c - 如何确定循环级并行性对先前语句的未来迭代的依赖性?
- github - 我无法在 Github 上创建分叉
- python - Ansible 中的回溯错误(Python 版本不匹配?)
- javascript - 使用 JavaScript 将名称添加到数据库中不起作用
- kotlin - 结果集中的动态 TableView 列 (kotlin)
- node.js - 异步等待 Fetch 给出未定义