استفاده از ستونهای محاسبه ای در لاراول

دیتابیس های MySQL و SQLite (از ورژن ۳.۳۱.۰) از ستونهای محاسبه ای پشتیبانی میکند. اجازه بدهید که ببینیم چطور میتوانیم از ستون های محاسبه ای در دیتابیس خود استفاده کنیم و در چه سناریویی ما میتوانیم این نوع از ستونها را در میگریشن خود اضافه کنیم

ستونهای مجازی و ذخیره شده

اساسا دو نوع ستون محاسبه ای وجود دارد: مجازی و ذخیره شده. اصلیترین تفاوت آنها در این است که ستون محاسبه ای مجازی هر بار با اجرای کوئری ، محاسبه را انجام داده و مقدار را برمیگرداند، که در این حالت هیچ فضایی از حافظه اشغال نمیگردد در صورتی که در ستون محاسبه ای ذخیره شده مقداری از فضا را برای ذخیره اطلاعات اشغال میکند اما این اطلاعات با insert شدن و یا update شدن محاسبه شده و در حافظه ذخیره میشود. به طور خلاصه ستونهای مجازی کوچکتر اما کندتر هستند در صورتی که ستونهای ذخیره شده بزرگتر و سریعتر هستند.

اجازه بدید که ببینیم در SQL چطور ستونهای محاسبه شده ایجاد میشود:

drop table if exists users;

create table users (
    id int auto_increment primary key,
    first_name varchar(50) not null,
    last_name varchar(50) not null,
    salary int(10) not null,
    name varchar(101) as (concat(first_name, ' ', last_name)),
    insurance int(10) as (salary * 0.1) stored
);

همانطور که میبینید ما میتوانیم ستونی ایجاد کنیم که مقدار آن بر اساس ستونی دیگر در همان سطر محاسبه شود. در برخی از سناریوها ، این بسیار مفید است ، به خصوص اگر بخواهیم این محاسبات را به صورت خودکار انجام دهیم.

ستونهای محاسبه شده در میگریشن لاراول

حالا ، اجازه بدید ببینیم که چطور در میگریشن لاراول خود ، یک ستون محاسبه شده اضافه کنیم

Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->integer('price');
    $table->integer('tax')->virtualAs('price * 0.27')->nullable();
    $table->integer('discount')->storedAs('price - 100')->nullable();
});

دقت کنید ،‌ ستونهای محاسبه شده برای SQLite در لاراول 8.x پشتیبانی میشود.

نکته جالب اینجاست که ایجاد ستون های محاسباتی در میگریشن های ما واقعاً آسان است و این بدان معنی است که ما می توانیم این موارد را به راحتی به مدل های خود اضافه کنیم و نیازی به افزودن پروپرتی محاسبه شده به خود مدل ها نیست.

خلاصه

در بعضی از موارد استفاده از ستونهای محاسبه شده یک دیدگاه خوب به شمار میرود. این به شما و موقعیت شما برمیگردد که از ستونهای محاسبه شده مجازی یا ذخیره شده استفاده کنید یا خیر، اما هر دو عملکرد خوبی دارند و به طور بالقوه می توانند کد را در خود فریم ورک کوچکتر و تمیزتر کنند.


چیزی که در این مقاله خواندید ترجمه ای از یک مقاله انگلیسی بود که از اینجا میتوانید متن انگلیسی آن را بخوانید.


باشد که با کد تمیزتری رستگار شوید.