Adding Custom Dropdown Product Attribute Programmatically in Laravel

Stefan Bogdanescu
Founder & Senior Architect · 17 August 2026

In this post, we’ll guide you through creating a custom dropdown attribute for your products using Laravel’s powerful Schema Builder and the DB facade. This will allow you to add an attribute with specific options and their positions programmatically.

Step 1: Define Your Custom Attribute

First, let’s define the product_attributes table in your database schema. You’ll need a column for the product ID, the option value, and its position.

Schema::create('product_attributes', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('product_id');
    $table->string('option_value')->nullable();
    $table->integer('position');
});

Step 2: Add the Attribute Programmatically

Next, we’ll create a controller method that accepts an array of option values and their positions. We’ll insert these into the product_attributes table using the DB facade.

use App\Models\Product;
use Illuminate\Support\Facades\DB;

public function addCustomAttribute(Product $product, $options)
{
    // Remove any existing attributes for this product
    $product->attributes()->delete();

    // Insert the new options and their positions
    foreach ($options as $index => $option) {
        DB::table('product_attributes')->insert([
            'product_id' => $product->id,
            'option_value' => $option['value'],
            'position' => $index + 1, // The position is the index plus one
        ]);
    }

    return true;
}

In this method, $options should be an array of options where each element is another array containing a value key:

$options = [
    ['value' => 'Option A'],
    ['value' => 'Option B'],
    ['value' => 'Option C'],
];

Step 3: Use the Method in Your Logic

Finally, you can call this method whenever a product has its custom attribute updated. Here’s an example:

$product = Product::find(1);

if ($request->has('custom_attributes')) {
    $options = $request->input('custom_attributes');
    $this->addCustomAttribute($product, $options);
}

This will create or update the product_attributes for the specified product based on the options sent in the request.

Conclusion

Adding a custom dropdown attribute programmatically allows you to manage your product attributes flexibly and efficiently. By following this guide, you can insert new options into your database schema directly from your controller, keeping your code clean and maintainable.

Remember that proper data validation should be implemented before inserting data into the database to ensure data integrity and security.

For more information on Laravel’s schema management and database interactions, visit our documentation for detailed guides and best practices.

Our network