Laravel对可变产品雄辩的关系

I'm building an E-commerce website that has Products with variation (Multiple choice products) e.g a T-shirt can have a variation/attribute of Color and Size with the following Options of White, Black, Blue and Large, Medium, Small respectively. Prior to the Variation and options, I have the following Eloquent Model:

`

class Product extends Model
{

    public $with = ['variations'];

    public function  variations(){
 return $this->belongsToMany(\App\Variation::class, 'option_product_variations')
          ->withPivot(["id","unit_selling_cost"]); 
        }

}

`

`

class Variation extends Model
{
    public $with = ['options','option_product_variations'];


    public function options()
    {
        return $this->hasMany(\App\Option::class);
    }

    public function  products(){

        return $this->belongsToMany(\App\Product::class, 'option_product_variations');       

    }


    public function option_product_variations()
    {      
       return $this->hasMany(\App\Option_product_variation::class);
     }

}

`

`

class Option extends Model
{
    protected $fillable = ['variation_id','title','slug','remark'];
    protected $primaryKey = 'id';

    public $with = ['option_product_variations'];


    public function variation()
    {
        return $this->belongsTo(\App\Variation::class);
    }


    public function option_product_variations()
    {      
       return $this->hasMany(\App\Option_product_variation::class);
     }
}

`

`

   class Option_product_variation extends Model
{
protected $fillable = ['product_unique_code','product_id','variation_id','option_id','unit_purchase_cost','unit_selling_cost','qty'];

      public function variation()
      {      
         return $this->belongsToOne(\App\Variation::class);
       }


       public function option()
       {     
          return $this->belongsToOne(\App\Option::class);
        }

}

`

`

public function up()
{
    Schema::create('option_product_variations', function (Blueprint $table) {
        $table->increments('id');

        $table->string('product_unique_code')->unique();

        $table->integer('product_id')->unsigned();
        $table->integer('variation_id')->unsigned();
        $table->integer('option_id')->unsigned();

        $table->decimal('unit_purchase_cost',10,2)->default(0.00);
        $table->decimal('unit_selling_cost',10,2)->default(0.00);

        $table->integer('qty')->nullable();

        $table->timestamps();

        $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
        $table->foreign('variation_id')->references('id')->on('variations')->onDelete('cascade');
        $table->foreign('option_id')->references('id')->on('options')->onDelete('cascade');


    });
}

`

How do I defined the relationship such that I can load all variations and options associated to a product once the Product model is queried?

I'm open to a better suggestion on structuring my Eloquent model for efficiency.