Technology

Using MySQL SET Columns in Laravel

A set column in the Laravel framework stores a set of values that come from some predefined enumerated set. It stands for a MySQL SET column. Surprisingly, the column should be treated as a string in your PHP code.

#The Migration

	public function up(): void
{
    Schema::table('auctions', function (Blueprint $table) {
        $table->set('activities', ['focus', 'webinar', 'conference', 'presentation', 'video_call', 'screening'])->nullable();
    });
}

The initial value for the column is NULL.

#Setting a Value

Treat the current value of the column as a string and concatenate an additional element:

$auction = Auction::find(10);
$auction->activities = $auction->activities . ',' . 'conference';

#Does It Contain a Value

To check if the column contains a particular value, use string containment. So for the Auction model, define the attribute is_webinar as:

public function getIsWebinarAttribute()
{
    return Str::contains($this->activities, 'webinar');
}
Yoram Kornatzky

Yoram Kornatzky