laravel - Laravel 有两个来自同一张表的外键
问题描述
嗨,我对数据库设计不是很好,所以我想知道是否可以从同一个表中创建一个具有两个外键的表。
我是否可以使用我尝试过的 laravel 迁移来做到这一点,但它不起作用
Schema::create('events', function (Blueprint $table) {
$table->increments('event_id');
$table->integer('book_id')->unsigned();
$table->integer('buyers_id')->unsigned();
$table->integer('seller_id')->unsigned();
$table->integer('status')->default(1);
$table->timestamps();
$table->foreign('book_id')->references('id')
->on('books')
->onDelete('cascade')
->onUpdate('cascade');
$table->foreign('buyers_id')->references('id')
->on('users')
->onDelete('cascade')
->onUpdate('cascade');
$table->foreign('seller_id')->references('id')
->on('users')
->onDelete('cascade')
->onUpdate('cascade');
});
所以事件表将有 3 个 FK
- 书籍中的一个 FK
来自用户的两个 FK
Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name')->unsigned(); $table->integer('user_type'); $table->integer('password'); $table->timestamps(); });
这是用户表的架构
解决方案
如果在您的应用程序中,您的用户既可以充当卖方又可以充当买方,那么role_id
您的任务评论中提出的解决方案将不适合您。
按照您已经在研究的解决方案,您的迁移似乎没有任何问题,当您运行时是否php artisan migrate
显示任何错误?如果您发布它,我可以更新我的回复的这一部分。
在 Event 模型中,您必须像这样描述关系:
public function buyer()
{
return $this->belongsTo(User::class, 'buyers_id');
}
public function seller()
{
return $this->belongsTo(User::class, 'seller_id');
}
因此,当您使用 Event 模型时,您可以这样做
$event = new Event;
$event->buyers_id = 1; // supposing there's a user with id 1
$event->seller_id = 2; // supposing there's a user with id 2
$event->save();
$event->buyer;
# => <User::class id=1>
$event->seller;
# => <User::class id=2>
[更新] 添加一点提示
与您的问题无关,但我建议您将buyers_id
列重命名为buyer_id
. 在 Laravel 中将外键名称保持为单数是一种常见的做法。
[更新] 文档链接
有关关系方法的完整文档。
– https://laravel.com/docs/5.7/eloquent-relationships#one-to-many-inverse
推荐阅读
- postgresql - 实体框架连接到 postgres 失败:“底层提供程序在打开时失败”
- python - 具有多个元素的数组的真值是不明确的 Python 错误
- android - 如何在 ConstraintLayout 中创建可访问的焦点小组?
- java - 如何正确使用回调接口从 onDataChange 中获取 RecyclerView 的值列表?
- python - Python:从 Markdown 文件中获取 json frontmatter
- meteor - 如何从 Meteor 中的响应数据接收/转换 arrayBuffer
- wpf - WPF:在可见性触发器上设置值
- typo3 - TYPO3 新闻扩展分页不起作用
- python - Python中的双向数据结构转换
- css - Bootstrap 4 列表项仅单行(省略号不起作用)