associative table for OneToMany relation

196 Views Asked by At

I'm working on a subtitles bot where:

  • A Movie has multiple subtitles (depending on quality and language)

  • A Series has multiple seasons with multiple episodes that have multiple subtitles (same as a movie)

These are my tables (Thanks to DaveRandom):

enter image description here

The problem is, as far as I know associative tables are for many-to-many relationships (correct me if I'm wrong), I'm kinda stuck here, especially with Eloquent's belongsToMany method:

class Subtitle extends Model {
    public $guarded = [];
    public $timestamps = false;


    public function SeriesEpisodes()
    {
        return $this->belongsToMany('SeriesEpisode', null, null, 'series_episodes_subtitle');
    }


    public function Movie()
    {
        return $this->belongsToMany('Movie');
    }
}

But the problem is, A Subtitle belongsToOne Episode, whereas an Episode might have many subtitles. I was wondering how one could use associative tables for such structure. Or should I change the structure?

1

There are 1 best solutions below

0
On BEST ANSWER

So what I was trying to achieve is possible with polymorphic relationships, 2 associative tables are removed and instead 2 fields are added to subtitles table: ex: parent_type, parent_id

then I can use:

subtitles:

class Subtitle extends Model {
    public $guarded = [];
    public $timestamps = false;

    public function Parent()
    {
        return $this->morphTo();
    }
}

series_episodes:

class SeriesEpisode extends Model {
    public $timestamps = false;
    public $guarded = [];
    public function Subtitles()
    {
        return $this->morphMany('Subtitle', 'Owner');
    }
}

movies:

class Movie extends Model {
    public $timestamps = false;
    public $guarded = [];
    public function Subtitles()
    {
    return $this->morphMany('Subtitle', 'Owner');
    }
}

Hope it helps others.