Laravel如何通过具有多态关系的单个模型访问差异模型?

时间:2019-05-16 09:23:32

标签: php laravel eloquent relationship

我正在尝试开发一个应用程序,使人们可以通过不同的活动制作自己的程序。到目前为止,我有3个表,第一个是程序表:

// Program table
id - integer
title - string

然后我有一个program_activities表

// Program_Activities Table
id - integer
program_id - integer
activity_id - integer
activity_type - string

然后我有所有不同的活动(观光,露营等)

如何通过程序模型访问所有活动?像这样

// Program.php

Class Program extends Model
{
    [...]

    public function activities()
    {
        // retrurn all activities
    }
}

这样$session->activities会列出该次会议的所有活动吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,所以我“很高兴”解决了我的问题,但是我真的不认为这是个好习惯,也不认为它是最佳的。尽管如此,这是我的解决方案。如果有人找到更好的方法,请告诉我。

// Program.php

    [...]

    /**
     * Get the activities of the program.
     */
    public function activities()
    {
        $program_activities = $this->hasMany('App\ProgramActivity')->get();
        $activities = [];
        foreach ($program_activities as $program_activity){
            $className = $program_activity->activity_type;
            $activity = $className::find($program_activity->activity_id);

            $activities[] = $activity;
        }
        $activities = collect($activities);
        return $activities;
    }

这样,当我执行$program->activities()时,就可以获取程序的所有活动。

即使我认为有更好的方法可以做到这一点,或者我认为Laravel可能会用许多关系中的一种来覆盖这一点,但我没有发现任何关系。如果您有更好的答案,请发布=)