Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何制作';众多关系之一';MySQL/Laravel中的关系_Php_Mysql_Database_Laravel_Relationship - Fatal编程技术网

Php 如何制作';众多关系之一';MySQL/Laravel中的关系

Php 如何制作';众多关系之一';MySQL/Laravel中的关系,php,mysql,database,laravel,relationship,Php,Mysql,Database,Laravel,Relationship,在我进入这个问题之前,我不是在问一对多的关系 我有一个名为注册的表,注册可以是讲座,测试,或能力。表注册人数与讲座表、测试表和能力表有一对多关系 我的问题是:如何使注册只允许链接到这三个表中的一个?目前,数据库允许注册既可以是讲座,也可以是考试,这是不可能的 问题的可视化表示: 我在谷歌上搜索了好几个小时,但找不到有类似问题的人,请帮忙。提前感谢。因为注册只是三种关系中的一种,所以其他两种关系将是空的,您不必担心它们 假设一个学生报名参加一个讲座,那么表行的test\u id和aptitude

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

我有一个名为
注册
的表,注册可以是
讲座
测试
,或
能力
。表
注册人数
讲座
表、
测试
表和
能力
表有一对多关系

我的问题是:如何使注册只允许链接到这三个表中的一个?目前,数据库允许注册既可以是讲座,也可以是考试,这是不可能的

问题的可视化表示:


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

因为注册只是三种关系中的一种,所以其他两种关系将是空的,您不必担心它们


假设一个学生报名参加一个讲座,那么表行的test\u id和aptitude\u id的值将为
NULL
,因此这些关系将是空的。

由于您使用的是laravel,现在似乎是尝试使用多对一的好时机

因此,您的
注册
表将具有一个名为
可注册
的关系,该关系可以指向这三个表中的任何一个。注意:名称
可注册
仅遵循laravel的示例命名约定

要实现这种关系,首先需要创建迁移,在迁移中可以使用如下方便的方法

// 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');
}

正确设置后,您可以使用此新关系,如标准的一对多关系。例如
$touch->registrations
,以获得一次讲座的所有注册。

这种问题可能是有缺陷的模式设计的症状。如果注册仅为三个关系中的一个,那么其他两个关系将为空,您不必担心它们。