gpt4 book ai didi

php - 如何在 MySQL/Laravel 中建立 'one OF many relationships' 关系

转载 作者:行者123 更新时间:2023-12-04 10:02:28 25 4
gpt4 key购买 nike

在我进入这个问题之前,我不是在问一对多的关系。

我有一张 table 叫 enrollments ,注册可以是 lecture , test , 或 aptitude .表enrollmentslectures 有一对多的关系表,tests表和aptitudes table 。

我的问题是:我怎样才能做到这一点,以便只允许将注册链接到这三个表中的一个?目前,数据库允许注册既是讲座又是测试,这应该是不可能的。

问题的可视化表示:
enter image description here

我用谷歌搜索了好几个小时,但找不到任何有类似问题的人,请帮忙。提前致谢。

最佳答案

由于您使用的是 Laravel,这似乎是尝试使用多对一的好时机 polymorphic relationship .

所以这个想法是你的 enrollments表将有一个名为 enrollable 的关系它可以指向 3 个表中的任何一个。注:名称enrollable只是遵循 laravel 的示例命名约定。

要实现这种关系,您首先需要创建迁移,您可以在其中使用方便的 morphs像这样的方法

// This will make 2 columns called 'enrollable_type' (VARCHAR) and 'enrollable_id' (UNSIGNED BIGINT)

Schema::table('enrollments', function (Blueprint $table) {
...
$table->morphs('enrollable');
});

然后你只需要在你的模型中设置关系
// In the Enrollment model you define the enrollable relationship which will be either of 3 model

public function enrollable()
{
return $this->morphTo('enrollable','enrollable_type','enrollable_id');
}

// in your 3 models you can specify the opposite relationship to refer back to the enrollment

public function enrollments()
{
return $this->morphMany('App\Enrollment', 'enrollable', 'enrollable_type', 'enrollable_id');
}

正确设置后,您可以像标准一对多关系一样使用这种新关系。如 $lecture->enrollments获得讲座的所有注册人数。

关于php - 如何在 MySQL/Laravel 中建立 'one OF many relationships' 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61762149/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com