Laravel relationship belongsToMany with composite primary keys



PHP Snippet 1:

public function up() {
    Schema::create('order_products', function (Blueprint $table) {
        $table->bigIncrements('id')->unsigned();
        $table->integer('order_id')->unsigned();
        $table->integer('product_id')->unsigned();
        $table->integer('order_product_statuses_id')->unsigned();
        $table->integer('ordinal')->unsigned();
        $table->integer('size');

        $table->primary('id');
        $table->foreign('order_id')->references('id')->on('orders');
        $table->foreign('product_id')->references('id')->on('products');
        $table->foreign('order_product_statuses_id')->references('id')->on('order_product_statuses');
    });
}

public function up() {
    Schema::create('order_product_statuses', function (Blueprint $table) {
        $table->bigIncrements('id')->unsigned();
        $table->integer('product_id')->unsigned();
        $table->integer('status_id')->unsigned();
        $table->integer('ordinal')->unsigned();
        $table->dateTime('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));

        $table->primary('id');
        $table->foreign('status_id')->references('id')->on('order_product_status_names');
    });
}

public function up() {
    Schema::create('order_product_status_names', function (Blueprint $table) {
        $table->bigIncrements('id')->unsigned();
        $table->string('name');
        $table->string('code');
        $table->dateTime('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));

        $table->primary('id');
    });
}