This is what I'm understanding for your data structure TrackType 1 -> ['Track 1', 'Track 2', 'Track 3'] TrackType 2 -> ['Track 4', 'Track 5', 'Track 6']
Track 1 -> ['Subgenre 1', 'Subgenre 2'] Track 2 -> ['Subgenre 2', 'Subgenre 3']
Correct?
If that's the case then the TrackType model would have a hasMany relationship to the Track model and the inverse would be the Track model belongsTo the TrackType model. This would be similar to a unique Post (TrackType) has many Comments (Tracks) http://laravel.com/docs/5.2/eloquent-relationships#one-to-many
Then the Tracks each can have multiple Subgenres, and the Subgenres can be shared between the tracks. This would be similar to User 1 and User 2 having multiple user roles where User 1 has the roles "SuperAdmin" and "User" and User 2 has the roles "Moderator" and "User." This is a Many to Many relationship http://laravel.com/docs/5.2/eloquent-relationships#many-to-many
To find the Tracks associated with the TrackType and specific subgenre name would be queried as such, I believe... $tracks = App\TrackType::with('tracks.subgenres')->where('trackTypeName', 'trackTypeNameHere')->where('subgenreName', 'sgNameHere')->get();