Laravel Как мне получить доступ к разным моделям через отдельные модели с полиморфными отношениями? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь разработать приложение, в котором можно создать свою собственную программу с различными видами деятельности.Пока у меня есть 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 голосов
/ 16 мая 2019

Хорошо, я "вроде" решил свою проблему, но я не думаю, что это хорошая практика, и при этом я не думаю, что она оптимальна.Тем не менее, вот мое решение.Если кто-нибудь найдет лучший способ, пожалуйста, покажите мне.

// 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 мог бы покрыть это одним из множества отношений, я не нашел ни одного.Если у вас есть лучший ответ, пожалуйста, напишите его =)

...