- پنجشنبه 20 دی 1397 ساعت 16:18
- 5.6.29
- در حال تکمیل
- منقضی شده
مقدمه
مایگریشنها نقش ورژن کنترل را برای دیتابیس بازی میکنند، که به اعضای تیمتان امکان ویرایش و به اشتراکگذاری اِسکیمای دیتابیس اپلیکیشن را میدهد. مایگریشنها معمولا از اِسکیما بیلدر (Schema Builder) استفاده میکنند تا به سادگی بتوانید اِسکیمای دیتابیس اپلیکیشن خود را بسازید. اگر تاکنون مجبور بودهاید تا به همتیمیهای خود بگویید تا یک ستون را به صورت دستی به اِسکیمای دیتابیسِ لوکالشان اضافه کنند، با مشکلی مواجه هستید که مایگریشنها آن را حل کردهاند.
فساد Schema
دیتابیس اَگنوستیک (database agnostic) را ارائه میدهد که امکان ساخت و دستکاری تیبلهای تمامی سیستمهای دیتابیس ساپورت شده توسط لاراول را فراهم میآورد.
تولید مایگریشن
برای ساخت یک مایگریشن، از کامند آرتیزان make:migration
استفاده کنید:
php artisan make:migration create_users_table
مایگریشن جدید در دایرکتوری database/migrations
قرار خواهد گرفت. نام هر فایل مایگریشن حاوی یک تایماستمپ است که به لاراول امکان تشخیص ترتیب مایگریشنها را میدهد.
آپشنهای --table
و --create
میتوانند برای نمایش نام تیبل و اینکه آیا مایگریشن منجر به ساخت تیبل جدیدی خواهد شد، استفاده شود. این آپشنها، نام دیتابیس، متد فساد Schema
و قسمتی از بدنه را برای مایگریشن سِت میکنند.
php artisan make:migration create_users_table --create=users
php artisan make:migration add_votes_to_users_table --table=users
اگر میخواهید مسیر خروجی کاستومایزی را برای تولید مایگریشن مشخص کنید، میتوانید هنگام اجرای کامند make:migration
از آپشن --path
استفاده کنید. مسیر مشخص شده باید به مسیر پایه اپلیکیشنتان مرتبط باشد.
ساختار مایگریشن
هر کلاس مایگریشن حاوی دو متدِ up
و down
است. متد up
برای افزودن تیبلها، ستونها و ایندکسهای جدید به دیتابیس استفاده میشود، در حالی که متد down
باید عملیات اجرا شده توسط متد up
را برعکس کند.
در بدنه هر دو متد میتوانید از اِسکیما بیلدر لاراول برای ساخت و ویرایش تیبلها استفاده کنید. برای آشنایی با تمامی متدهایی که در Schema
در دسترس هستند، داکیومنت آن را مطالعه کنید. برای مثال، مایگریشن مثال زیر، یک تیبل با نام flights
میسازد:
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateFlightsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('airline');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('flights');
}
}
اجرای مایگریشنها
برای اجرای تمامی مایگریشنهای اجرا نشده، کامند آرتیزان migrate
را اجرا کنید:
php artisan migrate
اگر از ویرژوال ماشین هوماِستد استفاده میکنید، این کامند را باید داخل ویرژوال ماشین خود اجرا کنید.
اجرای مایگریشن در محیط پروداکشن
برخی از عملیاتی که توسط مایگریشنها انجام میشوند، مخرب هستند، به این معنی که میتوانند منجر به از دست دادن دادهها شوند. به منظور محافظت در مقابل اجرای این کامندها در محیط پروداکشن، باید قبل از اجرای این کامندها، اجرای آنها را تایید کنید. برای اجرای کامندها بدون تاییدیه، از فلَگ --force
استفاده کنید:
php artisan migrate --force
رولبَک کردن مایگریشنها
برای رولبَک کردن آخرین عملیات مایگریشن اجرا شده، میتوانید از کامند استفاده کنید. این کامند آخرین دسته مایگریشنهای اجرا شده را که میتوانند شامل چندین فایل باشند را رولبَک میکند.
php artisan migrate:rollback
با استفاده از آپشن step
برای کامند rollback
میتوانید تعداد مایگریشنها برای رولبَک را محدود کنید. برای مثال، کامند زیر پنج مایگریشن آخر را رولبَک میکند:
php artisan migrate:rollback --step=5
کامند migrate:reset
تمامی مایگریشنهای اپلیکیشن را رولبَک خواهد کرد:
php artisan migrate:reset
رولبَک و مایگریت مجدد با یک کامند
کامند migrate:refresh
تمامی مایگریشنها را رولبَک کرده و سپس کامند migrate
را اجرا میکند. این کامند در واقع کل دیتابیس را دوباره میسازد:
php artisan migrate:refresh
// Refresh the database and run all database seeds...
php artisan migrate:refresh --seed
برای رولبَک و مایگریت مجدد تعداد محدودی از مایگریشنها، از آپشن step
برای کامند refresh
استفاده کنید. برای مثال، کامند زیر، پنج مایگریشن آخر را رولبَک کرده و مجددا میسازد:
php artisan migrate:refresh --step=5
حذف تمامی تیبلها و مایگریت
کامند migrate:fresh
تمامی تیبلها را از دیتابیس حذف کرده و سپس کامند migrate
را اجرا میکند:
php artisan migrate:fresh
php artisan migrate:fresh --seed
تیبلها
ساخت تیبل
برای ساخت یک تیبل جدید در دیتابیس، از متد create
فساد Schema
استفاده کنید. متد create
دو آرگومان میپذیرد. اولین آرگومان نام تیبل و دومین آرگومان یک کلوژر است که آبجکت Blueprint
که برای تعریف تیبل جدید استفاده میشود را میگیرد:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
});
طبیعتا، هنگام ساخت تیبل، میتوانید از متدهای مخصوص ایجاد ستون اسکیما بیلدر، برای تعریف ستونهای تیبل استفاده کنید.
بررسی وجود ستون/تیبل
با استفاده از متدهای hasTable
و hasColumn
میتوانید به راحتی وجود یا عدم وجود یک ستون یا تیبل را بررسی کنید:
if (Schema::hasTable('users')) {
//
}
if (Schema::hasColumn('users', 'email')) {
//
}
دیتابیس کانکشن و آپشنهای تیبل
اگر میخواهید یک عملیات اِسکیما را بر روی کانکشنی غیر از کانکشن پیشفرض اجرا کنید، از متد connection
استفاده کنید:
Schema::connection('foo')->create('users', function (Blueprint $table) {
$table->increments('id');
});
از کامندهای زیر در اِسکیما بیلدر، میتوانید برای تعریف آپشنهای تیبل استفاده کنید:
کامند | توضیح |
---|---|
$table->engine = 'InnoDB'; |
موتور ذخیرهسازی تیبل را مشخص میکند. (MySQL) |
$table->charset = 'utf8'; |
کَرَکتر سِت پیشفرض (default character set) تیبل را مشخص میکند. (MySQL) |
$table->collation = 'utf8_unicode_ci'; |
یک کولیشن (collation) پیشفرض برای تیبل مشخص میکند. (MySQL) |
$table->temporary(); |
یک تیبل موقت ایجاد میکند. (به جز در SQL Server) |
تغییر نام / حذف تیبل
برای تغییر نام تیبل موجود در دیتابیس، از متد rename
استفاده کنید:
Schema::rename($from, $to);
برای حذف یک تیبل موجود در دیتابیس، از متدهای drop
یا dropIfExists
استفاده کنید:
Schema::drop('users');
Schema::dropIfExists('users');
تغییر نام تیبل دارای کلیدهای خارجی
قبل از تغییر نام یک تیبل، باید مشخص کنید که هر قید کلید خارجی (foreign key constraints) موجود در تیبل، به جای اینکه لاراول نامی بر پایه کانونشنهای خود بر آن بگذارد، دارای نامی مشخص در فایلهای مایگریشن دارد. در غیر اینصورت، نام قید کلید خارجی، به نام قدیمی تیبل اشاره خواهد داشت.
ستونها
ساخت ستون
متد table
در فساد Schema
میتواند برای آپدیت تیبل موجود استفاده شود. مانند متد create
، متد table
نیز دو آرگومان میپذیرد: نام تیبل و یک کلوژر که یک instance از Blueprint
را میگیرد که برای افزودن ستونها به تیبل استفاده میشود.
Schema::table('users', function (Blueprint $table) {
$table->string('email');
});
تایپهای ستونی در دسترس
طبیعتا، اِسکیما بیلدر حاوی تایپهای مختلفی برای ستونها است که میتوانید هنگام ساخت تیبل خود از آنها استفاده کنید:
کامند | توضیحات |
---|---|
$table->bigIncrements('id'); |
معادل ستون Auto-incrementing UNSIGNED BIGINT (primary key) |
$table->bigInteger('votes'); |
معادل ستون BIGINT |
$table->binary('data'); |
معادل ستون BLOB |
$table->boolean('confirmed'); |
معادل ستون BOOLEAN |
$table->char('name', 100); |
معادل ستون CHAR با طول دلخواه |
$table->date('created_at'); |
معادل ستون DATE |
$table->dateTime('created_at'); |
معادل ستون DATETIME |
$table->dateTimeTz('created_at'); |
معادل ستون DATETIME (با timezone) |
$table->decimal('amount', 8, 2); |
معادل ستون DECIMAL به همراه کل ارقام (precision) و ارقام اعشاری (scale) |
$table->double('amount', 8, 2); |
معادل ستون DOUBLE به همراه کل ارقام (precision) و ارقام اعشاری (scale) |
$table->enum('level', ['easy', 'hard']); |
معادل ستون ENUM |
$table->float('amount', 8, 2); |
معادل ستون FLOAT به همراه کل ارقام (precision) و ارقام اعشاری (scale) |
$table->geometry('positions'); |
معادل ستون GEOMETRY |
$table->geometryCollection('positions'); |
معادل ستون GEOMETRYCOLLECTION |
$table->increments('id'); |
معادل ستون Auto-incrementing UNSIGNED INTEGER (primary key) |
$table->integer('votes'); |
معادل ستون INTEGER |
$table->ipAddress('visitor'); |
معادل ستون IP address |
$table->json('options'); |
معادل ستون JSON |
$table->jsonb('options'); |
معادل ستون JSONB |
$table->lineString('positions'); |
معادل ستون LINESTRING |
$table->longText('description'); |
معادل ستون LONGTEXT |
$table->macAddress('device'); |
معادل ستون MAC address |
$table->mediumIncrements('id'); |
معادل ستون Auto-incrementing UNSIGNED MEDIUMINT (primary key) |
$table->mediumInteger('votes'); |
معادل ستون MEDIUMINT |
$table->mediumText('description'); |
معادل ستون MEDIUMTEXT |
$table->morphs('taggable'); |
معادل ستونهای taggable_id UNSIGNED BIGINT و taggable_type VARCHAR |
$table->multiLineString('positions'); |
معادل ستون MULTILINESTRING |
$table->multiPoint('positions'); |
معادل ستون MULTIPOINT |
$table->multiPolygon('positions'); |
معادل ستون MULTIPOLYGON |
$table->nullableMorphs('taggable'); |
حالت nullable برای ستونهای morphs() |
$table->nullableTimestamps(); |
نام مستعاری برای timestamps() |
$table->point('position'); |
معادل ستون POINT |
$table->polygon('positions'); |
معادل ستون POLYGON |
$table->rememberToken(); |
معادل ستون nullable remember_token VARCHAR(100) |
$table->smallIncrements('id'); |
معادل ستون Auto-incrementing UNSIGNED SMALLINT (primary key) |
$table->smallInteger('votes'); |
معادل ستون SMALLINT |
$table->softDeletes(); |
معادل ستون nullable deleted_at TIMESTAMP برای soft delete |
$table->softDeletesTz(); |
معادل ستون nullable deleted_at TIMESTAMP (به همراه timezone) برای soft delete |
$table->string('name', 100); |
معادل ستون VARCHAR با طول دلخواه |
$table->text('description'); |
معادل ستون TEXT |
$table->time('sunrise'); |
معادل ستون TIME |
$table->timeTz('sunrise'); |
معادل ستون TIME (به همراه timezone) |
$table->timestamp('added_on'); |
معادل ستون TIMESTAMP |
$table->timestampTz('added_on'); |
معادل ستون TIMESTAMP (به همراه timezone) |
$table->timestamps(); |
معادل ستونهای created_at و updated_at از نوع TIMESTAMP و nullable |
$table->timestampsTz(); |
معادل ستونهای created_at و updated_at از نوع TIMESTAMP (به همراه timezone) و nullable |
$table->tinyIncrements('id'); |
معادل ستون Auto-incrementing UNSIGNED TINYINT (primary key) |
$table->tinyInteger('votes'); |
معادل ستون TINYINT |
$tabl->unsignedBigInteger('votes'); |
معادل ستون UNSIGNED BIGINT |
$table->unsignedDecimal('amount', 8, 2); |
معادل ستون UNSIGNED DECIMAL به همراه کل ارقام (precision) و ارقام اعشاری (scale) |
$table->unsignedInteger('votes'); |
معادل ستون UNSIGNED INTEGER |
$table->unsignedMediumInteger('votes'); |
معادل ستون UNSIGNED MEDIUMINT |
$table->unsignedSmallInteger('votes'); |
معادل ستون UNSIGNED SMALLINT |
$table->unsignedTinyInteger('votes'); |
معادل ستون UNSIGNED TINYINT |
$table->uuid('id'); |
معادل ستون UUID |
$table->year('birth_year'); |
معادل ستون YEAR |
مدیفایرهای ستون
علاوه بر انواع ستونهای لیست شده در جدول بالا، "مُدیفایرهای" مختلفی وجود دارد که میتوانید هنگام افزودن یک ستون به تیبل از آنها استفاده کنید. برای مثال، برای "قابل نال" ساختن ستون، میتوانید از متد nullable
استفاده کنید:
Schema::table('users', function (Blueprint $table) {
$table->string('email')->nullable();
});
جدول زیر حاولی لیستی از مدیفایرهای ستون در دسترس است. این لیست حاوی مدیفایرهای index نیست:
مدیفایر | توضیح |
---|---|
->after('column') |
ستون را بعد از ستون دیگری ایجاد میکند (MySQL) |
->autoIncrement() |
ستونهای INTEGER را به عنوان auto-increment (primary key) سِت میکند. |
->charset('utf8') |
برای ستون یک character set مشخص میکند (MySQL) |
->collation('utf8_unicode_ci') |
یک collation برای ستون مشخص میکند. (MySQL/SQL Server) |
->comment('my comment') |
یک کامنت به ستون اضافه میکند. (MySQL) |
->default($value) |
برای ستون مقداری پیشفرض را تعیین میکند. |
->first() |
ستون را به عنوان اولین ستون تیبل قرار میدهد. (MySQL) |
->nullable($value = true) |
اجازه میدهد تا ستون مقادیر NULL را نیز بپذیرد. |
->storedAs($expression) |
یک ستون stored generated ایجاد میکند. (MySQL) |
->unsigned() |
برای ستونهای INTEGER اتریبیوت UNSIGNED سِت میکند. (ستون MySQL) |
->useCurrent() |
ستونهای TIMESTAMP را به گونهای سِت میکند تا CURRENT_TIMESTAMP را به عنوان مقدار پیشفرض استفاده کنند. |
->virtualAs($expression) |
یک ستون virtual generated ایجاد میکند. (MySQL) |
ویرایش ستونها
پیشنیازها
قبل از ویرایش یک ستون، باید دیپندنسی doctrine/dbal
را به فایل composer.json
پروژه خود اضافه کنید. لایبرری Doctrine DBAL برای تعیین وضعیت فعلی ستون و ساخت کوئری SQL مورد نیاز برای مشخص ساختن تنظیمات ستون استفاده میشود.
composer require doctrine/dbal
آپدیت اتریبیوتهای ستون
متد change
امکان ویرایش نوع ستونهای موجود به یک نوع جدید و یا ویرایش اتریبیوتهای ستون را فراهم میآورد. برای مثال، ممکن است بخواهید سایز یک ستون از نوع استرینگ را تغییر دهید. برای مشاهده کاری که عملا متد change
انجام میدهد، سایز ستون را از 25 به 50 تغییر میدهیم:
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->change();
});
همچنین یک ستون را nullable قرار میدهیم:
Schema::table('users', function (Blueprint $table) {
$table->string('name', 50)->nullable()->change();
});
تنها نوع ستونهای bigInteger و binary و boolean و date و dateTime و dateTimeTz و decimal و integer و json و longText و mediumText و smallInteger و string و text و time و unsignedBigInteger و unsignedInteger و unsignedSmallInteger قابل تغییر هستند.
تغییر نام ستونها
برای تغییر نام یک ستون، میتوانید از متدrenameColumn
در اِسکیما بیلدر استفاده کنید. قبل از تغییر نام یک ستون، باید دیپندنسی doctrine/dbal
را به فایل composer.json
پروژه خود اضافه کنید.
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('from', 'to');
});
تغییر نام هر ستونی در تیبل که نوع ستون آن enum
باشد، در حال حاضر امکانپذیر نیست.
حذف ستونها
برای حذف ستونها، از متد اِسکیما بیلدر استفاده کنید. قبل از حذف ستونها از دیتابیسی که توسط SQLite مدیریت میشود، باید وابستگی doctrine/dbal
را به فایل composer.json
پروژه خود اضافه کرده و برای نصب آن، کامند composer update
را در ترمینال خود اجرا کنید:
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('votes');
});
برای حذف چندین ستون از یک تیبل، نام ستونها را به شکل آرایه به متد dropColumn
پاس دهید:
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['votes', 'avatar', 'location']);
});
حذف یا ویرایش چندین ستون در یک مایگریشن توسط دیتابیس SQLite پشتیبانی نمیشود.
نامهای مستعار در دسترس برای ستونها
کامند | توضیح |
---|---|
$table->dropRememberToken(); |
ستون remember_token را حذف میکند. |
$table->dropSoftDeletes(); |
ستون deleted_at را حذف میکند. |
$table->dropSoftDeletesTz(); |
نام مستعاری برای متد dropSoftDeletes() |
$table->dropTimestamps(); |
ستونهای created_at و updated_at را حذف میکند. |
$table->dropTimestampsTz(); |
نام مستعاری برای متد dropTimestamps() |
ایندکسها
ساخت ایندکس
اِسکیما بیلدر از چندین نوع بیلدر پشتیبانی میکند. ابتدا، مثال زیر را ببینید که مشخص میکند که مقادیر یک ستون مشخص باید یونیک (غیرتکراری) باشد. برای ایجاد ایندکس، متد unique
را به متد تعریف ستون زنجیر میکنیم:
$table->string('email')->unique();
یا به عنوان راه حلی جایگزین، ممکن است ایندکس را بعد از تعریف ستون ایجاد کنید. برای مثال:
$table->unique('email');
با ارسال آرایهای حاوی نام ستونها به متد index ، میتوانید یک ایندکس مرکب (compound یا composite) ایجاد کنید:
$table->index(['account_id', 'created_at']);
لاراول به صورت خودکار یک نام منطقی برای ایندکس تولید میکند، با این حال، برای مشخص کردن نام ایندکس، پارامتر دومی را به این متد پاس دهید:
$table->unique('email', 'unique_email');
تایپهای در دسترس برای ایندکسها
هر متد index یک آرگومان اختیاری دوم را میپذیرد که نام ایندکس را مشخص میکند. اگر این آرگومان حذف شده باشد، نام ایندکس از نامهای تیبل و ستون (ها) مشتق میشود.
کامند | توضیح |
---|---|
$table->primary('id'); |
یک primary key اضافه میکند. |
$table->primary(['id', 'parent_id']); |
کلیدهای ترکیبی اضافه میکند. |
$table->unique('email'); |
یک ایندکس unique اضافه میکند. |
$table->index('state'); |
یک ایندکس plain اضافه میکند. |
$table->spatialIndex('location'); |
یک ایندکس spatial اضافه میکند. (به جز SQLite) |
طول ایندکسها و MySQL/ MariaDB
لاراول به صورت پیشفرض از کَرَکتر سِت utf8mb4
استفاده میکند، که از امکان ذخیره emoji در دیتابیس پشتیبانی میکند. اگر ورژن MySQL مورد استفاده شما از 5.7.7 کمتر باشد یا از MariaDB و ورژنهای قدیمیتر از ریلیس 10.2.2 آن استفاده میکنید، احتمالا باید طول استرینگ تولید شده توسط مایگریشنها را به صورت دستی تنظیم کنید تا MySQL برای آنها ایندکس بسازد. برای اینکار متد Schema::defaultStringLength
را درون AppServiceProvider
فراخوانی کنید:
use Illuminate\Support\Facades\Schema;
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
یا به عنوان راه حلی دیگر، میتوانید آپشن innodb_large_prefix
را برای دیتابیس خود فعال کنید. برای مطالعه راهنمای نحوه فعالسازی این آپشن را در داکیومنت دیتابیس مراجعه کنید.
تغییر نام ایندکسها
برای تغییر نام یک ایندکس، میتوانید از متد استفاده کنید. این متد نام ایندکس جاری را به عنوان اولین آرگومان و نام مورد نظر را به عنوان دومین آرگومان میپذیرد:
$table->renameIndex('from', 'to')
حذف ایندکسها
برای حذف یک ایندکس باید نام ایندکس را مشخص کنید. لاراول به صورت پیشفرض، نامی منطقی را به صورت اتوماتیک به ایندکسها تخصیص میدهد. که این نام از ترکیب نام تیبل، نام ستون اندیسگذاری شده و type ایندکس به دست میآید. مثالهای زیر را ببینید:
کامند | توضیحات |
---|---|
$table->dropPrimary('users_id_primary'); |
یک primary key را از تیبل "users" حذف میکند. |
$table->dropUnique('users_email_unique'); |
یک ایندکس unique را از تیبل "users" حذف میکند. |
$table->dropIndex('geo_state_index'); |
یک ایندکس (basic index) را از تیبل "geo" حذف میکند. |
$table->dropSpatialIndex('geo_location_spatialindex'); |
یک ایندکس spatial را از تیبل "geo" حذف میکند (به جز SQLite). |
اگر نام ستونها را به صورت آرایه به یکی از متدهای حذف ایندکس ارسال کنید، نام ایندکس متناسب بر پایه نام تیبل، ستون و تایپ کلید تولید خواهد شد.
Schema::table('geo', function (Blueprint $table) {
$table->dropIndex(['state']); // Drops index 'geo_state_index'
});
قیدهای کلید خارجی
همچنین لاراول از امکان ساخت قیدهای کلید خارجی (foreign key constraints) نیز پشتیبانی میکند، که یکپارچی دادهها در سطح دیتابیس را حفظ میکند. در مثال زیر، ستون user_id
در تیبل posts
به ستون id
در تیبل users
رفرنس شده است.
Schema::table('posts', function (Blueprint $table) {
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
});
همچنین اکشن مناسب برای پراپرتیهای "on delete" و "on update" قید را نیز میتوانید تعیین کنید:
$table->foreign('user_id')
->references('id')->on('users')
->onDelete('cascade');
برای حذف یک کلید خارجی میتوانید از متد dropForeign
استفاده کنید. قیدهای کلید خارجی از الگوی نامگذاری مشابه ایندکسها استفاده میکنند. در نتیجه، از ترکیب نام تیبل ستونها به همراه پسوند _foreign
ایجاد میشوند.
$table->dropForeign('posts_user_id_foreign');
یا میتوانید یک آرایه از مقادیر را به این متد ارسال کنید که به صورت خودکار برای تولید نام قید مناسب در هنگام حذف استفاده میشود:
$table->dropForeign(['user_id']);
قیدهای کلید خارجی را با استفاده از متدهای زیر میتوانید در مایگریشنهای خود غیرفعال کنید:
Schema::enableForeignKeyConstraints();
Schema::disableForeignKeyConstraints();
سایر پستهای داکیومنت
- پیشگفتار
- Release Notes ترجمه در ورژنهای بعدی
- راهنمای آپگرید ترجمه در ورژنهای بعدی
- Contribution Guide ترجمه در ورژنهای بعدی
- شروع
- نصب
- پیکربندی
- ساختار دایرکتوری ترجمه در ورژنهای بعدی
- Laravel Homestead ترجمه در ورژنهای بعدی
- Laravel Valet ترجمه در ورژنهای بعدی
- دپلویمنت ترجمه در ورژنهای بعدی
- مفاهیم معماری
- چرخه کار ریکوئستها
- Service Container ترجمه در ورژنهای بعدی
- سرویس پرووایدرها
- فسادها ترجمه در ورژنهای بعدی
- Contracts ترجمه در ورژنهای بعدی
- اصول اولیه
- مسیریابی
- میدلور
- حفاظت در مقابل حملات CSRF
- کنترلرها
- HTTP Requests ترجمه در ورژنهای بعدی
- HTTP Responses ترجمه در ورژنهای بعدی
- ویوها
- تولید URL
- HTTP Session ترجمه در ورژنهای بعدی
- Validation ترجمه در ورژنهای بعدی
- Error Handling ترجمه در ورژنهای بعدی
- Logging ترجمه در ورژنهای بعدی
- فرانتاند
- تمپلتهای Blade
- محلیسازی
- JavaScript & CSS Scaffolding ترجمه در ورژنهای بعدی
- Compiling Assets (Laravel Mix) ترجمه در ورژنهای بعدی
- امنیت
- Authentication ترجمه در ورژنهای بعدی
- API Authentication (Passport) ترجمه در ورژنهای بعدی
- Authorization ترجمه در ورژنهای بعدی
- Encryption ترجمه در ورژنهای بعدی
- Hashing ترجمه در ورژنهای بعدی
- Resetting Passwords ترجمه در ورژنهای بعدی
- مباحث عمیقتر
- Artisan Console ترجمه در ورژنهای بعدی
- Broadcasting ترجمه در ورژنهای بعدی
- Cache ترجمه در ورژنهای بعدی
- Collections ترجمه در ورژنهای بعدی
- Events ترجمه در ورژنهای بعدی
- File Storage ترجمه در ورژنهای بعدی
- Helpers ترجمه در ورژنهای بعدی
- Mail ترجمه در ورژنهای بعدی
- Notifications ترجمه در ورژنهای بعدی
- Package Development ترجمه در ورژنهای بعدی
- Queues ترجمه در ورژنهای بعدی
- Task Scheduling ترجمه در ورژنهای بعدی
- دیتابیس
- دیتابیس: شروع ترجمه در ورژنهای بعدی
- Database: Query Builder ترجمه در ورژنهای بعدی
- دیتابیس: صفحهبندی
- دیتابیس: مایگریشن
- دیتابیس: سیدینگ
- Redis ترجمه در ورژنهای بعدی
- Eloquent ORM
- Eloquent: Getting Started ترجمه در ورژنهای بعدی
- Eloquent: Relationships ترجمه در ورژنهای بعدی
- Eloquent: Collections ترجمه در ورژنهای بعدی
- Eloquent: Mutators ترجمه در ورژنهای بعدی
- Eloquent: API Resources ترجمه در ورژنهای بعدی
- Eloquent: Serialization ترجمه در ورژنهای بعدی
- Testing
- Testing: Getting Started ترجمه در ورژنهای بعدی
- HTTP Tests ترجمه در ورژنهای بعدی
- Browser Tests (Laravel Dusk) ترجمه در ورژنهای بعدی
- Database Testing ترجمه در ورژنهای بعدی
- Mocking ترجمه در ورژنهای بعدی
- Official Packages
- Laravel Cashier ترجمه در ورژنهای بعدی
- Envoy Task Runner ترجمه در ورژنهای بعدی
- Laravel Horizon ترجمه در ورژنهای بعدی
- API Authentication (Passport) ترجمه در ورژنهای بعدی
- Laravel Scout ترجمه در ورژنهای بعدی
- Laravel Socialite ترجمه در ورژنهای بعدی