phpdatabase-designeloquentdatabase-relationsassociative-table

associative table for OneToMany relation


I'm working on a subtitles bot where:

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?


Solution

  • 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.