| کانال توسعه‌دهندگان لاراول |
1.61K subscribers
54 photos
113 links
⭕️ کانال توسعه‌دهندگان لاراول دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
فصل چهار - مدل‌ها و Eloquent ORM

بخش نهم - Transaction
s

تراکنش‌ها یا Transactionها برای انجام چندین عملیات پایگاه داده به صورت یکجا استفاده می‌شوند. به عبارت دیگر، اگر همه عملیات موفق باشند، تغییرات به پایگاه داده اعمال می‌شود، اما اگر یکی از عملیات‌ها با خطا مواجه شود، تمامی تغییرات لغو می‌شوند (rollback).

این موضوع به ویژه برای اطمینان از یکپارچگی داده‌ها در سناریوهایی که شامل چندین عملیات هستند مفید است، مانند ثبت چند جدول همزمان، مدیریت تراکنش‌های بانکی و غیره.

لاراول برای مدیریت تراکنش‌ها متدهایی را فراهم می‌کند که در فساد DB قرار دارند.

متد ها عبارتند از:

1- متد beginTransaction برای شروع یک تراکنش.

2- متد commit برای تأیید و ثبت تراکنش.

3- متد rollBack برای لغو تغییرات در صورت بروز خطا.

4- متد afterCommit برای انجام عملیات پس از commit.

مثال:

try {
DB::beginTransaction();

DB::table('users')->insert([
'name' => 'John',
'email' => 'john@example.com',
'password' => bcrypt('1234')
]);

DB::table('profiles')->insert([
'user_id' => 1,
'bio' => 'Test Bio',
'age' => 25
]);

DB::commit();
} catch (\Exception $e) {
DB::rollBack();
echo "Error: " . $e->getMessage();
}


در ابتدا تراکنش با beginTransaction آغاز می‌شود.
دو عملیات insert در جدول‌های مختلف انجام می‌شود.
اگر همه عملیات بدون خطا انجام شوند، با commit تغییرات ثبت می‌شود.
اگر خطا رخ دهد (مانند ارور در هر یک از عملیات)، با استفاده از catch خطا مدیریت شده و rollBack فراخوانی می‌شود تا تغییرات لغو شود.

لاراول همچنین یک متد ساده‌تر و قابل خواندن‌تر به نام transaction ارائه می‌دهد که می‌توان کل تراکنش را در یک Closure قرار داد:

مثال:
DB::transaction(function () {
DB::table('users')->insert([
'name' => 'John',
'email' => 'john@example.com',
'password' => bcrypt('1234')
]);

DB::table('profiles')->insert([
'user_id' => 2,
'bio' => 'Test Bio',
'age' => 30
]);
})


اگر کد داخل transaction موفق باشد، تغییرات به صورت خودکار ذخیره (commit) می‌شود.
در صورت بروز خطا، تغییرات به صورت خودکار لغو (rollback) می‌شوند.

این متد علاوه بر اجرای کد در قالب تراکنش، تعداد دفعاتی که باید در صورت مواجهه با خطا مجدد تلاش کند را می‌پذیرد. این ویژگی برای مواقعی که با عملیات‌های رقابتی روبرو هستید (مانند lockها یا عملیات با احتمال تعارض) مفید است.
DB::transaction(function () {
//
}, 3)


متد afterCommit به شما امکان می‌دهد که یک callback یا عملیات خاص را پس از موفقیت‌آمیز بودن commit اجرا کنید. برای مثال، می‌توانید پس از ذخیره تغییرات، رویدادهایی مثل ارسال ایمیل را انجام دهید.
DB::afterCommit(function () {
echo "Success";
});


می
‌توانید از پارامترهایی برای کنترل تراکنش استفاده کنید. به عنوان مثال، تنظیم چندین تراکنش تو در تو (nested transactions) نیز در لاراول امکان‌پذیر است.

تراکنش‌ها در سناریوهایی مانند عملیات مالی، مدیریت سفارشات یا عملیات‌های مربوط به موجودی کالا اهمیت زیادی دارند. با استفاده از آن‌ها می‌توانید از ناسازگاری داده‌ها و بروز اشکالات جدی در پایگاه داده جلوگیری کنید.

به طور خلاصه، تراکنش‌ها در لاراول به شما امکان می‌دهند عملیات مختلف پایگاه داده را به صورت امن انجام دهید، به طوری که در صورت بروز خطا همه تغییرات برگردانده شود.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
6👍1
فصل چهار - مدل‌ها و Eloquent ORM

بخش دهم - Route Model Binding


‏Route Model Binding به ما اجازه می‌دهد تا به صورت مستقیم و خودکار مدل‌های لاراول را از URL به دست آوریم و در کنترلر استفاده کنیم. به عنوان مثال، اگر یک Post داریم و بخواهیم یک پست خاص را با استفاده از شناسه (ID) در URL بازیابی کنیم، معمولاً بدون استفاده از این ویژگی کدی شبیه به زیر می‌نویسیم:
Route::get('/posts/{id}', function($id) {
$post = Post::findOrFail($id);
return view('posts.show', compact('post'));
});


اما با استفاده از Route Model Binding می‌توانیم کد را ساده‌تر کنیم:
Route::get('/posts/{post}', function(Post $post) {
return view('posts.show', compact('post'));
});


لاراول از مقدار {post} در مسیر استفاده می‌کند تا مدل Post را بر اساس مقدار (به طور پیش‌فرض id) جستجو کرده و به کنترلر ارسال کند.

نکته: این قابلیت برای انواع مدل‌ها قابل استفاده است و شما می‌توانید از Custom Key‌ها نیز استفاده کنید.

همانطور که توضیح داده شد، {post} به طور پیشفرض بر اساس فیلد id جست و جو می کند، اما میتوانید به سادگی فیلد پیشفرض را تغییر دهید:
Route::get('/posts/{post:slug}', function(Post $post) {
return view('posts.show', compact('post'));
});


در کد بالا به جای {post}، از {post:slug} استفاده شده، به این معنی که از فیلد slug برای جست و جو استفاده شود، میتوانید فیلد مورد نظر را به جای slug بنویسید.

همچنین میتوانید فیلد پیشفرض را در مدل تغییر دهید:
class Post extends Model
{
public function getRouteKeyName()
{
return 'slug';
}
}


در این صورت با نوشتن {post} به طور پیشفرض از فیلد slug برای جست و جو استفاده می شود.

🔖 #Laravel, #PHP, #لاراول, #فصل_۴

👤 AmirHossein

💎 Channel: @DevelopixLaravel
7👍2
فصل پنج - Migrations and Database

بخش اول - تعریف
و اجرای Migrationها

در لاراول، Migrations یک سیستم برای مدیریت و ایجاد تغییرات در ساختار پایگاه داده است. این سیستم به توسعه‌دهندگان امکان می‌دهد تا جدول‌ها، ستون‌ها و روابط پایگاه داده را با استفاده از کد PHP تعریف، تغییر و مدیریت کنند. با استفاده از مایگریشن ها، تغییرات در پایگاه داده در کنار کد پروژه نگهداری می‌شود و می‌توان آن را به‌راحتی در محیط‌های مختلف به‌روزرسانی کرد.

اهداف و مزایای استفاده از مایگریشن‌ها

1- مایگریشن ها به شما این امکان را می‌دهند که تغییرات پایگاه داده را با تغییرات کد هماهنگ کنید.

2- به‌راحتی می‌توانید تغییرات اعمال شده را به نسخه قبلی برگردانید.

3- وقتی توسعه‌دهندگان مختلف روی یک پروژه کار می‌کنند، می‌توانند تغییرات پایگاه داده را به‌صورت کنترل‌شده و منظم در بین خودشان به اشتراک بگذارند.

4- به‌جای ویرایش دستی پایگاه داده، می‌توانید از دستورات ساده برای افزودن یا تغییر جداول استفاده کنید.

ایجاد و اجرای مایگریشن
برای ایجاد مایگریشن جدید، می‌توانید از دستور Artisan زیر استفاده کنید:
php artisan make:migration create_users_table --create=users


فلگ --create بیانگر این است که مایگریشن برای ساخت جدول جدید می باشد.

این دستور یک فایل مایگریشن جدید در پوشه database/migrations ایجاد می‌کند. در فایل مایگریشن معمولاً دو متد اصلی وجود دارد:

1- متد up
شامل دستوراتی برای ایجاد یا تغییر ساختار جدول (افزودن ستون‌ها، روابط و غیره) است.

2- متد down
شامل دستوراتی برای بازگردانی تغییرات اعمال‌شده در متد up() است.

ساختار یک فایل مایگریشن
یک مایگریشن نمونه، به شکل زیر است:
return new class extends Migration
{
public function up(): void
{
Schema::create('flights', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('airline');
$table->timestamps();
});
}

public function down(): void
{
Schema::drop('flights');
}
};


اجرای مهاجرت‌ها
برای اجرای مایگریشن‌ها و اعمال تغییرات روی پایگاه داده از دستور زیر استفاده می‌شود:
php artisan migrate


این دستور تمامی مایگریشن‌هایی که هنوز اجرا نشده‌اند را اعمال می‌کند. برای بازگرداندن آخرین سری از تغییرات می‌توانید از دستور زیر استفاده کنید:
php artisan migrate:rollback


برای بازگرداندن تمامی تغییرات و شروع از ابتدا:
php artisan migrate:reset


سایر دستورات در پست مربوطه توضیح داده می شود.

تغییرات در جداول موجود
اگر بخواهید تغییراتی در جداول موجود اعمال کنید، باید از مایگریشن جدیدی استفاده کنید. مثلاً برای افزودن ستون به جدول users می‌توانید از دستور زیر بهره ببرید:
php artisan make:migration add_phone_to_users_table --table=users


فلگ --table بیانگر این است که مایگریشن برای ویرایش جدول موجود می باشد.

سپس در فایل مایگریشن ایجادشده می‌توانید تغییرات خود را اعمال کنید.

اصول نام‌گذاری مایگریشن‌ها
انتخاب نام‌های مناسب برای مایگریشن‌ها از اهمیت ویژه‌ای برخوردار است، زیرا نه تنها باعث خوانایی و شفافیت کد می‌شود، بلکه به وضوح نقش و وظیفه‌ی هر مایگریشن را مشخص می‌کند. لاراول از نام فایل‌ها و کلاس‌های مایگریشن برای سازمان‌دهی و اجرای صحیح آن‌ها استفاده می‌کند.

1- نام مایگریشن باید عملی که انجام می‌دهد را توصیف کند. به عنوان مثال:
create_users_table
add_email_to_users_table
remove_phone_from_users_table
update_orders_status

2- نام مایگریشن معمولاً با فعلی که عمل اصلی را توصیف می‌کند شروع می‌شود، سپس به اسم جدول یا ستون مورد نظر اشاره می‌کند. این قالب باعث شفافیت بیشتر می‌شود و به راحتی می‌توان فهمید که مایگریشن چه کاری انجام می‌دهد.

3- هنگام اشاره به جداول، معمولاً از نام‌های جمع استفاده می‌شود. برای مثال، مایگریشن مربوط به جدول کاربران به صورت create_users_table نام‌گذاری می‌شود و نه create_user_table.

4- سعی کنید از نام‌های طولانی و زائد پرهیز کنید. نام‌ها باید توصیفی و مختصر باشند. برای مثال، به جای add_new_email_column_to_users_table می‌توانید از add_email_to_users_table استفاده کنید.

5- برای نام‌گذاری فایل‌ها و کلاس‌های مایگریشن از قالب snake_case استفاده می‌شود، که بین کلمات از خط زیرین _ استفاده می‌کند. این قالب به‌طور پیش‌فرض توسط دستور php artisan make:migration رعایت می‌شود.

در قسمت بعدی با متد های ساخت جداول به وسیله ی مایگریشن ها آشنا می شویم.

🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
5👍2
فصل پنج - Migrations and Database

بخش اول - تعریف
و اجرای Migrationها

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

ابتدا یک فایل مایگریشن جدید با دستور زیر ایجاد می‌کنیم:
php artisan make:migration create_posts_table --create=posts


این دستور یک فایل مایگریشن جدید به نام create_posts_table در پوشه database/migrations ایجاد می‌کند.

حالا می‌توانید به فایل ایجاد شده مراجعه کنید و متد up() را ویرایش کنید تا جدول posts ساخته شود. به عنوان مثال:
return new class extends Migration
{
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content')->nullable();
$table->timestamps();
});
}

public function down()
{
Schema::dropIfExists('posts');
}
}


مایگریشن بالا یک جدول با نام posts ایجاد میکند و 5 فیلد مشخص شده در متد up را در آن ایجاد میکند.

در نهایت، برای اجرای مایگریشن و ایجاد جدول در پایگاه داده، دستور زیر را اجرا کنید:
php artisan migrate


در ادامه متد های قابل استفاده برای ساخت جدول توضیح داده می شود.

در این قسمت با یک فساد جدید به نام Schema آشنا می شویم، این فساد برای تعریف، ایجاد، تغییر و حذف جداول و ستون‌های پایگاه داده در مایگریشن‌ها به‌کار می‌رود.

1- متد create
این متد برای ایجاد یک جدول جدید استفاده می‌شود. درون این متد، می‌توان با استفاده از کلاس Blueprint ستون‌ها و ویژگی‌های جدول را تعریف کرد.
Schema::create('posts', function (Blueprint $table) {
//
});


2- متد table
این متد مشابه create اما برای تغییر ساختار یک جدول موجود استفاده می‌شود. می‌توانید ستون‌ها را اضافه، تغییر یا حذف کنید.

3- متد hasTable
این متد بررسی می‌کند که آیا جدول مشخصی در پایگاه داده وجود دارد یا خیر.
if (Schema::hasTable('posts')) {
//
}


4- متد hasColumn
این متد بررسی می‌کند که آیا ستون خاصی در یک جدول مشخص وجود دارد یا خیر.
if (Schema::hasColumn('posts', 'title')) {
//
}


5- متد hasIndex
این متد بررسی می‌کند که آیا یک ایندکس (کلید یا شاخص) خاص در جدول موردنظر وجود دارد یا خیر. توجه داشته باشید که این متد ممکن است به همراه برخی نسخه‌های دیتابیس‌ها یا پل‌های خاص لاراول بیشتر کاربرد داشته باشد.
if (Schema::hasIndex('posts', 'posts_title_index')) {
//
}


6- متد connection
این متد برای انجام عملیات Schema بر روی یک اتصال خاص پایگاه داده استفاده می‌شود. به شما اجازه می‌دهد با دیتابیس‌های مختلفی کار کنید.
Schema::connection('sqlite')->create('products', function (Blueprint $table) {
//
});


7- متد rename
این متد نام یک جدول را تغییر می‌دهد.
Schema::rename('old_posts', 'new_posts');


8- متد drop
این متد برای حذف کامل یک جدول استفاده می‌شود.
Schema::drop('posts');


9- متد dropIfExists
این متد جدول را تنها در صورتی که وجود داشته باشد، حذف می‌کند. این رویکرد از بروز خطا در صورت عدم وجود جدول جلوگیری می‌کند.

10- متد enableForeignKeyConstraints
این متد، محدودیت‌های کلید خارجی را در پایگاه داده فعال می‌کند. این متد معمولاً در سیستم‌های مدیریت پایگاه داده مانند MySQL و SQLite مفید است.
Schema::enableForeignKeyConstraints();


11- متد disableForeignKeyConstraints
این متد، محدودیت‌های کلید خارجی را در پایگاه داده غیرفعال می‌کند. غیرفعال کردن محدودیت‌ها می‌تواند برای حذف جداول یا تغییر ساختار آنها (مانند حذف یا اضافه کردن ستون‌های مرتبط) که ممکن است در حالت عادی باعث خطا شود، مفید باشد.

12- متد withoutForeignKeyConstraints
این متد یک Closure را اجرا می‌کند که در حین اجرای آن، محدودیت‌های کلید خارجی به طور موقت غیرفعال می‌شوند. پس از پایان اجرای Closure، محدودیت‌ها به‌طور خودکار به حالت اولیه بازمی‌گردند.
Schema::withoutForeignKeyConstraints(function () {
Schema::dropIfExists('posts');
});


در قسمت ها بعدی با متد کلاس Blueprint برای کار با column ها می پردازیم.

🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
4👍3
فصل پنج - Migrations and Database

بخش اول - تعریف
و اجرای Migrationها

کلاس Blueprint در لاراول به عنوان ابزاری در مایگریشن‌ها استفاده می‌شود که امکان تعریف، تغییر و حذف ستون‌ها و ویژگی‌های جداول پایگاه داده را فراهم می‌کند. این کلاس همراه با متدهای Schema به کار می‌رود و مجموعه‌ای از متدها را برای مدیریت ستون‌ها و ایندکس‌ها ارائه می‌دهد.

مثال:
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
});


در این مثال، کلاس Blueprint برای تعریف ساختار جدول users استفاده شده است. این جدول دارای سه ستون اصلی است.

از این قسمت به بررسی و توضیح متد های مدیریت جداول می پردازیم.

1- متد bigIncrements
این متد یک ستون کلید اصلی با نوع داده BIGINT ایجاد می‌کند که مقدار آن به صورت AUTO_INCREMENT خواهد بود.
$table->bigIncrements('id');


2- متد bigInteger
این متد یک ستون عدد صحیح بزرگ (BIGINT) ایجاد می‌کند که می‌تواند برای ذخیره اعداد بزرگ استفاده شود.
$table->bigInteger('views');


3- متد binary
این متد یک ستون با نوع داده باینری برای ذخیره داده‌های خام (مانند فایل‌ها) ایجاد می‌کند.
$table->binary('file_data', length: 16, fixed: true);


4- متد boolean
این متد یک ستون Boolean ایجاد می‌کند که برای ذخیره مقادیر منطقی استفاده می‌شود.
$table->boolean('is_active');


5- متد char
این متد یک ستون متنی با طول ثابت ایجاد می‌کند.
$table->char('code', length: 10);


6- متد dateTimeTz
این متد یک ستون تاریخ و زمان با پشتیبانی از منطقه زمانی (timezone) ایجاد می‌کند.
$table->dateTimeTz('start_time', precision: 0);


7- متد dateTime
این متد یک ستون تاریخ و زمان بدون منطقه زمانی ایجاد می‌کند.
$table->dateTime('created_at', precision: 0);


8- متد date
این متد یک ستون برای ذخیره تنها تاریخ (بدون زمان) ایجاد می‌کند.
$table->date('birth_date');


9- متد decimal
این متد یک ستون عددی دقیق با نقطه اعشار ایجاد می‌کند.
$table->decimal('price', total: 10, places: 2);

در این مثال، ستون price برای ذخیره اعداد با حداکثر 10 رقم و 2 رقم اعشار ایجاد می‌شود.

10- متد double
این متد یک ستون عددی با دقت شناور (دقت کمتر از decimal) ایجاد می‌کند.
$table->double('rating');


11- متد enum
این متد یک ستون از نوع ENUM ایجاد می‌کند که مقادیر آن باید از مجموعه‌ای از مقادیر از پیش تعریف‌شده باشد.
$table->enum('status', ['pending', 'approved', 'rejected']);


12- متد float
ایجاد ستون عددی شناور (مانند double) که برای اعداد تقریبی مناسب است.

$table->float('amount', precision: 53);


13- متد foreignId
ایجاد ستون عددی برای استفاده به عنوان کلید خارجی، معمولاً با نام id جدول مرجع.
$table->foreignId('user_id');


14- متد foreignIdFor
ایجاد ستون کلید خارجی و مشخص کردن کلاس مدل مرجع.
$table->foreignIdFor(User::class);


15- متد foreignUlid
ایجاد کلید خارجی با نوع ULID.
$table->foreignUlid('user_id');


16- متد foreignUuid
ایجاد کلید خارجی از نوع UUID.
$table->foreignUuid('user_id');


17- متد geography
ایجاد ستون جغرافیایی برای ذخیره داده‌های مکانی (مانند طول و عرض جغرافیایی).
$table->geography('coordinates', subtype: 'point', srid: 4326);


18- متد geometry
ایجاد ستون هندسی برای ذخیره داده‌های مکانی.
$table->geometry('positions', subtype: 'point', srid: 0);


19- متد id
ایجاد ستون کلید اصلی به صورت خودکار.
$table->id();


20- متد increments
ایجاد کلید اصلی AUTO_INCREMENT از نوع INT.
$table->increments('id');


21- متد integer
ایجاد ستون عدد صحیح.
$table->integer('votes');


22- متد ipAddress
ایجاد ستونی برای ذخیره آدرس IP.
$table->ipAddress('visitor');


23- متد json
ایجاد ستون برای ذخیره داده‌های JSON.
$table->json('options');


24- متد jsonb
مشابه json، اما برای دیتابیس‌های پشتیبانی‌کننده از نوع JSONB (مانند PostgreSQL) استفاده می‌شود.
$table->jsonb('options');


25- متد longText
ایجاد ستون متنی طولانی.
$table->longText('description');


🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
5👍1
فصل پنج - Migrations and Database

بخش اول - تعریف
و اجرای Migrationها

1- متد macAddress
ایجاد ستونی برای ذخیره آدرس MAC.
$table->macAddress('device_mac');


2- متد mediumIncrements
ایجاد کلید اصلی AUTO_INCREMENT از نوع MEDIUMINT.
$table->mediumIncrements('id');


3- متد mediumInteger
ایجاد ستون عدد صحیح از نوع MEDIUMINT.

4- متد mediumText
ایجاد ستون متنی از نوع MEDIUMTEXT.
$table->mediumText('summary');


5- متد morphs
این متد دو ستون morphable_id (عدد صحیح) و morphable_type (متن) برای پیاده‌سازی روابط چندشکلی (polymorphic) ایجاد می‌کند.
$table->morphs('commentable');

در این مثال، ستون‌های commentable_id و commentable_type برای رابطه چندشکلی ایجاد می‌شوند.

6- متد nullableMorphs
مشابه morphs، اما ستون‌ها به صورت nullable تعریف می‌شوند.
$table->nullableMorphs('taggable');


7- متد nullableTimestamps
ایجاد دو ستون created_at و updated_at که می‌توانند nullable باشند.
$table->nullableTimestamps(precision: 0);


8- متد nullableUlidMorphs
مشابه nullableMorphs، اما ستون‌های کلید خارجی از نوع ULID هستند و nullable تعریف می‌شوند.
$table->nullableUlidMorphs('taggable');


9- متد nullableUuidMorphs
مشابه nullableMorphs، اما ستون‌ها از نوع UUID هستند و nullable تعریف می‌شوند.

10- متد rememberToken
ایجاد ستونی به نام remember_token برای مدیریت توکن‌های احراز هویت.
$table->rememberToken();


11- متد set
ایجاد ستونی از نوع SET که می‌تواند شامل یک یا چند مقدار از یک مجموعه مشخص باشد.
$table->set('flavors', ['strawberry', 'vanilla']);


12- متد smallIncrements
ایجاد کلید اصلی AUTO_INCREMENT از نوع SMALLINT.
$table->smallIncrements('id');


13- متد smallInteger
ایجاد ستون عدد صحیح از نوع SMALLINT.

14- متد softDeletesTz
ایجاد ستونی برای Soft Delete با پشتیبانی از منطقه زمانی.
$table->softDeletesTz('deleted_at', precision: 0);


15- متد softDeletes
ایجاد ستونی برای Soft Delete بدون منطقه زمانی.

16- متد string
ایجاد ستونی متنی (رشته‌ای).
$table->string('name', length: 100);


17- متد text
ایجاد ستونی متنی طولانی.
$table->text('description');


18- متد timeTz
ایجاد ستونی برای ذخیره زمان همراه با منطقه زمانی.
$table->timeTz('sunrise', precision: 0);


19- متد time
ایجاد ستونی برای ذخیره زمان بدون منطقه زمانی.

20- متد timestampTz
ایجاد ستونی برای ذخیره تایم‌استمپ همراه با منطقه زمانی.
$table->timestampTz('added_at', precision: 0);


21- متد timestamp
ایجاد ستونی برای ذخیره تایم‌استمپ بدون منطقه زمانی.

22- متد timestampsTz
ایجاد دو ستون created_at و updated_at همراه با منطقه زمانی.
$table->timestampsTz(precision: 0);


23- متد timestamps
ایجاد دو ستون created_at و updated_at بدون منطقه زمانی.

24- متد tinyIncrements
ایجاد کلید اصلی AUTO_INCREMENT از نوع TINYINT.
$table->tinyIncrements('id');


25- متد tinyInteger
ایجاد ستون عدد صحیح کوچک از نوع TINYINT.

26- متد tinyText
ایجاد ستون متنی کوچک (حداکثر 255 کاراکتر).
$table->tinyText('notes');


27- متد unsignedBigInteger
ایجاد ستون BIGINT بدون علامت.
$table->unsignedBigInteger('votes');


28- متد unsignedInteger
ایجاد ستون INT بدون علامت.

29- متد unsignedMediumInteger
ایجاد ستون MEDIUMINT بدون علامت.

30- متد unsignedSmallInteger
ایجاد ستون SMALLINT بدون علامت.

31- متد unsignedTinyInteger
ایجاد ستون TINYINT بدون علامت.

32- متد ulidMorphs
ایجاد ستون‌های رابطه چندشکلی (morphable_id و morphable_type) از نوع ULID.
$table->ulidMorphs('taggable');


33- متد uuidMorphs
ایجاد ستون‌های رابطه چندشکلی (morphable_id و morphable_type) از نوع UUID.

34- متد ulid
ایجاد ستونی از نوع ULID برای ذخیره شناسه‌های یکتا.
$table->ulid('id');


35- متد uuid
ایجاد ستونی از نوع UUID برای ذخیره شناسه‌های یکتا.

36- متد vector
ایجاد ستونی برای ذخیره داده‌های برداری (Vector Data). این متد معمولاً برای ذخیره داده‌های پیچیده مانند مدل‌های یادگیری ماشینی استفاده می‌شود.
$table->vector('embedding', dimensions: 100);


37- متد year
ایجاد ستونی برای ذخیره سال (از نوع YEAR).
$table->year('birth_year');


🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
7👍3
فصل پنج - Migrations and Database

بخش اول - تعریف
و اجرای Migrationها

1- متد after
مشخص می‌کند که ستون باید بعد از ستون دیگری قرار گیرد.
این متد فقط برای برخی پایگاه‌های داده (مانند MySQL) پشتیبانی می‌شود.
$table->string('middle_name')->after('first_name');


2- متد autoIncrement
مشخص می‌کند که ستون به صورت AUTO_INCREMENT تعریف شود.
$table->integer('id')->autoIncrement();


3- متد charset
تنظیم charset برای ستون.
$table->string('name')->charset('utf8mb4');


4- متد collation
تنظیم collation برای ستون.
$table->string('name')->collation('utf8mb4_unicode_ci');


5- متد comment
اضافه کردن یک توضیح برای ستون.
$table->integer('age')->comment('Age of the user in years');


6- متد default
مقدار پیش‌فرض برای ستون را تنظیم می‌کند.
$table->string('status')->default('active');


7- متد first
مشخص می‌کند که ستون باید در ابتدای جدول قرار گیرد.
این متد فقط برای برخی پایگاه‌های داده (مانند MySQL) پشتیبانی می‌شود.
$table->string('first_name')->first();


8- متد from
مقدار شروع را برای ستون عددی AUTO_INCREMENT مشخص می‌کند.
$table->integer('id')->autoIncrement()->from(1000);


9- متد invisible
مشخص می‌کند که ستون در نتایج کوئری‌های SELECT به‌صورت پیش‌فرض مخفی باشد.
این ویژگی فقط در MySQL 8.0.23 یا بالاتر پشتیبانی می‌شود.
$table->string('secret_code')->invisible();


10- متد nullable
مشخص می‌کند که ستون می‌تواند مقدار NULL داشته باشد.
$table->string('middle_name')->nullable();


11- متد storedAs
$table->integer('price');
$table->integer('tax');
$table->integer('total')->storedAs('price + tax');

ستون total مقدار price + tax را ذخیره می‌کند.

12- متد unsigned
مشخص می‌کند که ستون عددی بدون علامت (unsigned) باشد.
$table->integer('votes')->unsigned();


13- متد useCurrent
مقدار پیش‌فرض ستون را به زمان فعلی تنظیم می‌کند. معمولاً برای ستون‌های timestamp یا datetime استفاده می‌شود.
$table->timestamp('created_at')->useCurrent();


14- متد useCurrentOnUpdate
مشخص می‌کند که ستون در زمان به‌روزرسانی رکورد به‌صورت خودکار مقدار زمان فعلی را دریافت کند.
$table->timestamp('updated_at')->useCurrentOnUpdate();


15- متد virtualAs
ایجاد یک ستون محاسباتی مجازی (Virtual Generated Column). مقدار این ستون در دیتابیس ذخیره نمی‌شود.
$table->integer('price');
$table->integer('tax');
$table->integer('total')->virtualAs('price + tax');

ستون total مقدار price + tax را محاسبه می‌کند ولی ذخیره نمی‌شود.

16- متد generatedAs
تعریف یک ستون تولیدشده (Generated Column) با استفاده از عبارت SQL.
$table->integer('price');
$table->integer('tax');
$table->integer('total')->generatedAs('price + tax');


17- متد always
معمولاً همراه با ستون‌های تولیدشده (Generated Column) استفاده می‌شود و مقدار آن همیشه از عبارت SQL تولید می‌شود.
$table->integer('total')->generatedAs('price + tax')->always();


18- متد change
برای تغییر ویژگی‌های ستون‌های موجود در یک جدول استفاده می‌شود.
این متد میتواند پس از 17 متد قبلی فراخوانی شود و ویژگی های ستون فعلی را ویرایش کند.
$table->integer('id')->autoIncrement()->change();

در این مثال، ستون id به صورت AUTO_INCREMENT ایجاد نشده است، اما با این متد به صورت AUTO_INCREMENT ویرایش می شود.

19- متد dropMorphs
این متد برای حذف ستونی که مربوط به Polymorphic Relations است، استفاده می‌شود.
$table->dropMorphs('commentable');


20- متد dropRememberToken
این متد برای حذف ستونی که برای ذخیره‌ی remember token در جداول کاربران استفاده می‌شود، به کار می‌رود.
$table->dropRememberToken();


21- متد dropSoftDeletes
این متد برای حذف ستون‌هایی که مربوط به Soft Deletes هستند استفاده می‌شود.
$table->dropSoftDeletes();


22- متد dropSoftDeletesTz
این متد مشابه dropSoftDeletes است، اما برای ستون‌هایی که از نوع timestamp with timezone استفاده می‌کنند.

23- متد dropTimestamps
این متد برای حذف ستون‌های created_at و updated_at استفاده می‌شود.
$table->dropTimestamps();


24- متد dropTimestampsTz
این متد مشابه dropTimestamps است، اما برای ستون‌های created_at و updated_at که با نوع timestamp with timezone ذخیره شده‌اند، استفاده می‌شود.

🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
8👍1
⚜️ دوره لاراول - قسمت هفتدهم
📚 مینی پروژه TODo App - دسته بندی ها

خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو یکمی جلوتر بردیم و هندل کردن بخش دسته بندی ها رو توسعه دادیم... ، یک مقدار ریزی درمورد Log ها حرف زدیم و ازشون استفاده کردیم...

توی قسمت های بعدی این مجموعه رو ادامه میدیم.

🎞 لینک ویدیو:
https://youtu.be/P8WUBBichTM

🔗 Github Repo

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
5
⚜️ دوره لاراول - قسمت هجدهم
📚 مینی پروژه TODo App - تسک ها

خلاصه :
توی این ویدیو مینی پروژه ToDo اپ رو یکمی جلوتر بردیم و هندل کردن بخش تسک ها رو توسعه دادیم...

توی قسمت های بعدی این مجموعه رو ادامه میدیم.

⭕️ یه مقدار در اخر ویدیو مشکل ادیت داریم.

🎞 لینک ویدیو:
https://youtu.be/_cEN-LIi2Lo

🔗 Github Repo

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
1
Forwarded from Developix Support
سلام
پرسشنامه‌ پیش رو با هدف درک بهتر رفتار و نیازهای کسب‌وکارهای اینترنتی ایرانی در استفاده از ابزارهای پرداخت توسط یک تیم پژوهشی مستقل طراحی شده است. نتایج این پژوهش به ما کمک می‌کند تا ابزارهایی کارآمدتر و منطبق با نیازهای واقعی شما ارائه دهیم. تکمیل این پرسشنامه کاملاً بی‌نام است و هیچ اطلاعات شخصی از شما ذخیره نخواهد شد. پاسخ‌های شما نقش کلیدی در بهبود خدمات ابزارهای پرداختی اینترنتی در کشور دارد، بنابراین از شما خواهشمندیم با دقت و صداقت به سوالات پاسخ دهید. زمان لازم برای تکمیل: حدود 5 دقیقه لطفاً برای شروع پرسشنامه، روی لینک زیر کلیک کنید و ما را در این مسیر همراهی کنید.
.
https://survey.porsline.ir/s/lEtAnSw8
.
سپاس فراوان از همکاری صمیمانه شما
👍3
فصل پنج - Migrations and Database

بخش اول - تعریف
و اجرای Migrationها

1- متد unique
این متد یک ایندکس یکتا برای یک یا چند ستون تعریف می‌کند. ایندکس یکتا باعث می‌شود که مقدارهای تکراری برای این ستون‌ها در جدول ذخیره نشود.
$table->string('email')->unique();


2- متد index
این متد یک ایندکس ساده برای یک یا چند ستون ایجاد می‌کند. این ایندکس برای بهبود عملکرد کوئری‌هایی استفاده می‌شود که مرتباً این ستون‌ها را جستجو یا فیلتر می‌کنند.
$table->string('username')->index();


3- متد primary
این متد یک کلید اصلی (Primary Key) برای یک یا چند ستون تعریف می‌کند. ستون‌های کلید اصلی نمی‌توانند مقدار NULL بپذیرند و باید یکتا باشند.
$table->integer('order_id')->primary();


4- متد fullText
این متد یک ایندکس تمام‌متنی (Full Text Index) برای جستجوی سریع متن در ستون‌های متنی (مثل TEXT یا VARCHAR) ایجاد می‌کند.
$table->fullText('content');


5- متد spatialIndex
این متد یک ایندکس مکانی (Spatial Index) برای ستون‌های مختصات جغرافیایی (مانند ستون‌هایی با نوع GEOMETRY) ایجاد می‌کند.
$table->point('coordinates')->spatialIndex();


6- متد renameIndex
این متد کلید اصلی جدول را حذف می‌کند.
 $table->dropPrimary();


7- متد dropUnique
این متد یک ایندکس یکتا را از جدول حذف می‌کند.
$table->dropUnique('users_email_unique');


8- متد dropIndex
این متد یک ایندکس ساده را از جدول حذف می‌کند.
$table->dropIndex('users_username_index');


9- متد dropFullText
این متد یک ایندکس تمام‌متنی را از جدول حذف می‌کند.
$table->dropFullText('articles_content_fulltext');


10- متد dropSpatialIndex
این متد یک ایندکس مکانی را از جدول حذف می‌کند.
$table->dropSpatialIndex('locations_coordinates_spatialindex');


11- متد foreign
این متد مشخص می‌کند که یک ستون در جدول فعلی قرار است به‌عنوان کلید خارجی عمل کند.
معمولاً به همراه متدهای references و on استفاده می‌شود.
$table->unsignedBigInteger('user_id');
$table->foreign('user_id');


12- متد references
این متد مشخص می‌کند که کلید خارجی به کدام ستون از جدول دیگر اشاره دارد.
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id');


13- متد on
این متد مشخص می‌کند که کلید خارجی باید به کدام جدول در پایگاه داده متصل شود.
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');


14- متد foreignId
این متد یک راه کوتاه‌تر برای تعریف ستون کلید خارجی است. به طور پیش‌فرض، نوع ستون را unsignedBigInteger تعریف می‌کند.
$table->foreignId('user_id');


15- متد constrained
این متد تعریف کلید خارجی را آسان‌تر و سریع‌تر می‌کند. زمانی که از آن استفاده کنید:
- ستون را به‌عنوان کلید خارجی تعریف می‌کند.
- به صورت پیش‌فرض جدول مقصد را از نام ستون حدس می‌زند (مثلاً اگر ستون user_id باشد، به جدول users اشاره می‌کند).
- به ستون id به‌عنوان کلید اصلی در جدول مقصد اشاره می‌کند.
$table->foreignId('user_id')->constrained('users');


16- متد dropForeign
برای حذف یک کلید خارجی (Foreign Key) در جدول استفاده می‌شود. این متد زمانی استفاده می‌شود که بخواهید محدودیت‌های کلید خارجی روی یک ستون را از بین ببرید.
$table->dropForeign('posts_user_id_foreign');


17و 18- متد های onUpdate و onDelete
زمانی که یک کلید خارجی (foreign key) تعریف می‌کنید، می‌توانید رفتار حذف یا به‌روزرسانی رکوردهای مرتبط را مشخص کنید.
$table->foreignId('user_id')->constrained('users')->onDelete('cascade')->onUpdate('cascade');

ورودی می تواند حالت های restrict، set null، no action نیز باشد.

19- متد cascadeOnDelete
وقتی رکورد اصلی حذف شود، رکوردهای مرتبط در جدول فرعی هم حذف می‌شوند.
$table->foreignId('user_id')->constrained('users')->cascadeOnDelete();


20- متد restrictOnDelete
اگر رکوردهای مرتبط در جدول فرعی وجود داشته باشند، حذف رکورد اصلی ممنوع است.

21- متد nullOnDelete
اگر رکورد اصلی حذف شود، مقدار کلید خارجی در جدول فرعی به NULL تغییر می‌کند.

22- متد noActionOnDelete
حذف رکورد اصلی تأثیری روی جدول فرعی ندارد.

23- متد restrictOnUpdate
اگر رکورد مرتبط در جدول فرعی وجود داشته باشد، تغییر مقدار کلید خارجی در جدول اصلی ممنوع است.

24- متد nullOnUpdate
اگر مقدار کلید خارجی در جدول اصلی تغییر کند، مقدار کلید خارجی در جدول فرعی به NULL تغییر می‌کند.

25- متد noActionOnUpdate
تغییر مقدار کلید خارجی در جدول اصلی تأثیری روی جدول فرعی ندارد.

🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
6👍2🔥1
بلاخره اکستنشن جدید Laravel به‌صورت رسمی در ورژن بتا منتشر شد.

Extension ID: laravel.vscode-laravel

برای فهمیدن جزئیات و خفن بودن این اکستنشن میتونید از وبلاگ لاراول نیوز بخونید:

https://laravel-news.com/laravel-vs-code-extension-public-beta

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
🔥13👍2
فصل پنج - Migrations and Database

بخش اول - تعریف
و اجرای Migrationها

در قسمت آخر این بخش به تمامی کامندهای مربوط به مایگریشن ها اشاره می شود.

1- کامند make:migration
این دستور برای ایجاد یک فایل Migration جدید استفاده می‌شود.
php artisan make:migration create_flights_table


این کامند می تواند دو فلگ —create برای مایگریشن مربوط به ساخت جدول و —table برای مایگریشن های مربوط به ویرایش جدول را نیز دریافت کند.
php artisan make:migration create_flights_table
--create=flights

php artisan make:migration create_flights_table
--table=flights


2- کامند schema:dump
این دستور یک نسخه SQL dump از طرح پایگاه داده (schema) فعلی شما ایجاد می‌کند. این فایل در مسیر database/schema ذخیره می‌شود.
php artisan schema:dump


این متد نیز تعدادی فلگ دریافت میکند که در ادامه توضیح داده می شود:
- فلگ prune
فایل‌های مهاجرت قدیمی (migration) را حذف می‌کند و تنها یک نسخه dump ایجاد می‌کند.
php artisan schema:dump --prune


- فلگ database
این دستور نسخه SQL از طرح پایگاه داده را برای پایگاه داده مشخص‌شده ایجاد می‌کند.
php artisan schema:dump --database=testing


همچنین می توانید هر دو فلگ را همزمان استفاده کنید.

3- کامند migrate
این دستور تمامی فایل‌های مهاجرت را که تاکنون اجرا نشده‌اند، اجرا می‌کند و پایگاه داده را به‌روز می‌کند.
php artisan migrate


این کامند نیز تعدادی فلگ دریافت میکند:
- فلگ pretend
این دستور تغییرات مهاجرت را بدون اعمال واقعی، شبیه‌سازی می‌کند. می‌توانید ببینید چه کوئری‌هایی قرار است اجرا شوند.

- فلگ isolated
این دستور مهاجرت‌ها را در یک حالت ایزوله‌شده (isolated) اجرا می‌کند. این حالت معمولاً برای جلوگیری از تداخل مهاجرت‌ها در اجراهای هم‌زمان استفاده می‌شود.
php artisan migrate --isolated


- فلگ force
این دستور برای اجرای مهاجرت‌ها در حالت Production (محیط عملیاتی) استفاده می‌شود. به‌طور پیش‌فرض، مهاجرت‌ها در Production متوقف می‌شوند، اما با --force اجرا خواهند شد.

4- کامند migrate:status
این دستور وضعیت مهاجرت‌ها را نشان می‌دهد. مشخص می‌کند که کدام فایل‌های مهاجرت اجرا شده‌اند و کدام هنوز اجرا نشده‌اند.
php artisan migrate:status


5- کامند migrate:rollback
این دستور آخرین گروه از مهاجرت‌ها (آخرین batch) را برمی‌گرداند.

این کامند نیز تعدادی فلگ دریافت می کند که در ادامه بررسی می شود:
- فلگ step
این دستور x مرحله از آخرین مهاجرت‌ها را برمی‌گرداند.
php artisan migrate:rollback --step=5


- فلگ batch
این دستور مهاجرت‌های batch شماره ۳ را برمی‌گرداند.
مهاجرت‌ها در اجرای هر بار migrate در یک batch مشخص ذخیره می‌شوند.
php artisan migrate:rollback --batch=3


- فلگ pretend
این دستور مهاجرت‌ها را برنمی‌گرداند، اما تغییرات آن را شبیه‌سازی کرده و کوئری‌های مربوطه را نمایش می‌دهد.
php artisan migrate:rollback --pretend


6- کامند migrate:reset
این دستور همه مهاجرت‌ها را به حالت اول برمی‌گرداند.
تمامی جداول و تغییرات اعمال‌شده حذف می‌شوند.
php artisan migrate:reset


7- کامند migrate:refresh
این دستور ابتدا تمامی مهاجرت‌ها را برمی‌گرداند (reset می‌کند) و سپس آن‌ها را دوباره اجرا می‌کند.
php artisan migrate:refresh


این متد نیز فلگ هایی دریافت می کند:
- فلگ seed
این دستور همانند دستور قبل عمل می‌کند، اما علاوه بر آن، seederها را نیز اجرا می‌کند تا داده‌های اولیه وارد پایگاه داده شوند. (سیدر ها در بخش بعدی توضیح داده می شود)
php artisan migrate:refresh --seed


- فلگ step
این دستور x مرحله آخر مهاجرت‌ها را برمی‌گرداند و دوباره اجرا می‌کند.
php artisan migrate:refresh --step=5


8- کامند migrate:fresh
این دستور تمام جداول پایگاه داده را به‌طور کامل حذف می‌کند و سپس مهاجرت‌ها را دوباره اجرا می‌کند.
php artisan migrate:fresh


این متد هم فلگ هایی را دریافت می کند:
- فلگ seed
این دستور همانند migrate:fresh عمل می‌کند، اما پس از اجرای مهاجرت‌ها، seederها را نیز اجرا می‌کند.
php artisan migrate:fresh --seed


- فلگ database
این دستور نسخه پایگاه داده خاص را از ابتدا می‌سازد.
php artisan migrate:fresh --database=admin


🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
4👍1
فصل پنج - Migrations and Database

بخش دوم - Factories


فکتوری‌ها در لاراول ابزاری برای ایجاد سریع و راحت داده‌های نمونه (mock) برای تست و توسعه هستند. با استفاده از فکتوری‌ها، می‌توانید به راحتی رکوردهایی را در پایگاه داده تولید کنید، بدون اینکه نیاز باشد به صورت دستی داده‌ها را وارد کنید.

در تست‌های خودکار، می‌توانید با استفاده از فکتوری‌ها داده‌های نمونه ایجاد کنید تا رفتار اپلیکیشن خود را آزمایش کنید.

ساخت یک فکتوری:
برای ساخت فکتوری، می توانید از دستور زیر استفاده کنید:
php artisan make:factory UserFactory


این دستور یک فکتوری با نام UserFactory برای شما در مسیر database/factories ایجاد می کند.
در فایل فکتوری که ایجاد شده، می‌توانید داده‌های پیش‌فرض را تعریف کنید.

مثال: تعریف یک فکتوری برای مدل User:
class UserFactory extends Factory
{
protected $model = \App\Models\User::class;

public function definition()
{
return [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => bcrypt('password'),
'remember_token' => Str::random(10),
];
}
}

هر فیلد جدول، مقدار پیش‌فرضی در اینجا دارد که به صورت خودکار تولید می‌شود.

استفاده از فکتوری:
برای تولید یک رکورد در پایگاه داده:
User::factory()->create();

این کد یک رکورد تست برای شما ایجاد می کند.

برای تولید چندین رکورد:
User::factory()->count(10)->create();

این کد به تعداد مشخص شده، رکورد تست برای شما ایجاد می کند.

برای ایجاد یک رکورد ولی بدون ذخیره کردن آن:
$user = User::factory()->make();

این کد یک رکورد تست برای شما ایجاد می کند اما در دیتابیس ذخیره نمی کند.

مثال کامل:
فرض کنید یک جدول برای مقالات (Posts) دارید.
class PostFactory extends Factory
{
protected $model = \App\Models\Post::class;

public function definition()
{
return [
'title' => $this->faker->sentence(),
'content' => $this->faker->paragraph(),
'user_id' => \App\Models\User::factory(),
];
}
}


این کد یک جمله رندوم برای title، یک پاراگراف رندوم برای content، و یک کاربر جدید برای user_id ایجاد می کند.

فرض کنید می خواهیم 100 پست تستی ایجاد کنیم:
Post::factory()->count(100)->create();


این فکتوری به سادگی 100 پست تستی برای شما ایجاد خواهد کرد.

فکتوری‌ها ابزاری قدرتمند برای تولید داده‌های تستی و توسعه هستند.
به کمک آن‌ها می‌توانید به‌سرعت داده‌های مرتبط ایجاد کرده و تست‌های خود را ساده‌تر و سریع‌تر انجام دهید.
فکتوری‌ها انعطاف‌پذیر هستند و می‌توانید شرایط مختلف (مانند ایجاد رکوردهای مرتبط) را پیاده‌سازی کنید.

در پست های بعدی به طور کامل به فکتوری ها خواهیم پرداخت.

🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
7👍2
فصل پنج - Migrations and Database

بخش دوم - Factories


لاراول هنگام کار با فکتوری‌ها، مجموعه‌ای از متدها و پراپرتی‌ها را ارائه می‌دهد که به شما کمک می‌کنند داده‌های نمونه پیشرفته‌تری بسازید.
این متد ها درون کلاس فکتوری پیاده سازی می شوند.

1- متد definition
این متد اصلی ترین متد برای تعریف داده‌های پیش‌فرض فکتوری استفاده می‌شود. داده‌های تولید شده توسط Faker در این متد تعریف می‌شوند.
این متد یک آرایه برمی گرداند که شامل نام فیلد ها به عنوان key و مقدار فیلد ها به عنوان value می باشد.
class UserFactory extends Factory
{
protected $model = \App\Models\User::class;

public function definition()
{
return [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'password' => bcrypt('password'),
];
}
}


2- متد unverified
این متد می‌تواند حالتی خاص برای فکتوری شما تعریف کند. مثلاً داده‌هایی را تولید کند که ایمیل کاربر تایید نشده باشد.
وقتی شما از متد unverified استفاده می‌کنید، در واقع یک وضعیت خاص برای فیلدها تعریف می‌کنید که باعث می‌شود برخی از فیلدها مانند email_verified_at برای رکوردهای ساخته شده، مقدار null داشته باشند.
public function unverified()
{
return $this->state(function (array $attributes) {
return [
'email_verified_at' => null,
];
});
}

// Usage:
User::factory()->unverified()->create();

این متد یک state جدید ایجاد می کند، یعنی می توانید برخی از مقادیر فیلدها را در unverified تغییر دهید بدون این که کل تعریف پیش‌فرض در متد definition را تغییر دهید.

3- متد suspended
یک حالت خاص دیگر (مانند unverified) برای داده‌ها تعریف می‌کند. این متد معمولاً برای افزودن وضعیت خاص به رکوردها استفاده می‌شود.
public function suspended()
{
return $this->state(function (array $attributes) {
return [
'is_suspended' => true,
];
});
}

// Usage:
User::factory()->suspended()->create();


4- متد configure
متدی که به شما اجازه می‌دهد عملیات سفارشی‌سازی یا رویدادهایی را قبل یا بعد از ایجاد رکوردها اجرا کنید. معمولاً برای تنظیم مقادیر اضافی یا اعمال تغییرات خاص استفاده می‌شود.
public function configure()
{
return $this->afterCreating(function (User $user) {
$user->profile()->create([
'bio' => 'This is a sample bio.',
]);
});
}

// Usage:
User::factory()->create();


این متد پس از اجرای متد craete به طور خودکار ایجاد می شود.
همچنین می توانید به جای afterCreating از afterMaking استفاده کنید درصورت استفاده از متد make.

5- متد newFactory
برای اتصال یک مدل به فکتوری استفاده می‌شود. این متد معمولاً در مدل‌ها تعریف می‌شود و هدف اصلی آن مشخص کردن فکتوری مرتبط با مدل است تا بتوان به سادگی و بدون نیاز به تنظیم دستی، رکوردهای مدل را با استفاده از فکتوری تولید کرد.
class User extends Authenticatable
{
use HasFactory;

protected static function newFactory()
{
return UserFactory::new();
}
}


درصورتی که نام مدل و فکتوری شما استاندارد باشد (مثلا User و UserFactory به ترتیب برای مدل و فکتوری)، لاراول به طور خودکار این عملیات را انجام می دهد.


در قسمت بعدی با تمامی متد های مرتبط با فکتوری که از مدل ها قابل فراخوانی هستند آشنا می شویم.

🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍42
فصل پنج - Migrations and Database

بخش دوم - Factories


در این قسمت به متد های مربوط به فکتوری ها و قابل فراخوانی از مدل ها می پردازیم.

1- متد factory
برای ایجاد یک فکتوری جدید استفاده می‌شود. در نسخه‌های قدیمی لاراول این متد به طور خودکار در دسترس بود، اما در نسخه‌های جدید لاراول باید از Model::factory() استفاده کنید.
User::factory()->...


در اینجا از متد factory برای تولید یک فکتوری از مدل User استفاده شده است.

2- متد create
برای ذخیره مدل‌های تولیدشده در پایگاه داده استفاده می‌شود. این متد رکورد جدید را در دیتابیس ذخیره می‌کند.
User::factory()->create();


در این مثال، کاربر جدیدی بر اساس فیلد های تعریف شده در UserFactory ایجاد و ذخیره می‌شود.

3- متد trashed
برای فیلتر کردن مدل‌هایی که در حالت soft delete قرار دارند، استفاده می‌شود. این متد برای زمانی که می‌خواهید فقط مدل‌های حذف‌شده را ایجاد کنید مفید است.
User::factory()->trashed()->create();


در این مثال، کاربری که حذف شده است، ایجاد می‌شود.

4- متد make
مشابه create است اما رکورد را ذخیره نمی‌کند. این متد فقط شی مدل را برمی‌گرداند و هیچ تغییراتی در دیتابیس ایجاد نمی‌کند.
$user = User::factory()->make();


در اینجا، یک مدل جدید ساخته می‌شود اما در پایگاه داده ذخیره نمی‌شود.

5- متد count
برای مشخص کردن تعداد رکوردهایی است که باید ایجاد شوند.
User::factory()->count(10)->create();


در اینجا 10 کاربر ایجاد و در پایگاه داده ذخیره می‌شود.

6- متد suspended
معمولاً به عنوان یک حالت (state) در فکتوری‌ها استفاده می‌شود. این متد یک وضعیت خاص (مثل تعلیق یا وضعیت غیر فعال) را به مدل اختصاص می‌دهد.
User::factory()->suspended()->create();


در اینجا، یک کاربر که در وضعیت تعلیق قرار دارد، ایجاد می‌شود.

7- متد state
برای اعمال حالت‌های خاص (custom states) به مدل‌های تولید شده استفاده می‌شود. این متد به شما این امکان را می‌دهد که ویژگی‌های مدل را به صورت پویا تغییر دهید.
User::factory()->state([
'email_verified_at' => null,
])->create();


در اینجا، یک کاربر تولید می‌شود که ایمیل او تایید نشده است.

8- متد has
برای ایجاد روابط (مثل روابط hasMany) استفاده می‌شود. این متد به شما این امکان را می‌دهد که تعداد مدل‌های وابسته (مانند پست‌ها، کامنت‌ها و غیره) را که باید به مدل اصلی تعلق داشته باشند مشخص کنید.
User::factory()->has(Post::factory()->count(5))->create();


ابتدا یک کاربر جدید ایجاد می‌شود، سپس 5 پست مرتبط با این کاربر به طور خودکار ایجاد می‌شود.
ای متد نیاز به پیاده سازی روابط مربوطه در مدل های مربوطه می باشد.

9- متد hasXXX
این متد همان متد has می باشد اما به صورت داینامیک.
User::factory()->hasPosts(3)->create();


در اینجا، کاربری ایجاد می‌شود و به طور خودکار 3 پست برای او ایجاد می‌شود.
بخش Posts در متد hasPosts درواقع نام رابطه posts در مدل User می باشد.

10- متد for
برای تعریف یک رابطه به صورت خاص (معمولاً belongsTo) استفاده می‌شود. این متد به شما این امکان را می‌دهد که مدل‌های وابسته را به مدل اصلی اختصاص دهید.
Post::factory()->for(User::factory())->create();


در اینجا، یک پست ایجاد می‌شود که به طور خودکار به یک کاربر جدید تعلق دارد.

11- متد forXXX
این متد همان متد for می باشد اما به صورت داینامیک.
Post::factory()->forUser($user)->create();


در اینجا، یک پست برای یک کاربر مشخص ایجاد می‌شود.
بخش User در متد forUser درواقع رابطه user در مدل Post می باشد.

12- متد hasAttached
برای ایجاد روابط وابسته بین مدل‌ها (مانند belongsToMany) استفاده می‌شود. این متد برای مدیریت روابط چند به چند (many-to-many) کاربرد دارد.
User::factory()->hasAttached(Role::factory(), 3)->create();


در اینجا، یک کاربر جدید ایجاد می‌شود و به طور خودکار به 3 نقش متصل می‌شود.

13- متد recycle
برای استفاده از یک مدل موجود (که قبلاً ایجاد شده یا حذف نرم شده) در روابط مختلف میان مدل‌ها استفاده می‌شود. این متد به شما کمک می‌کند که یک مدل خاص را در فکتوری‌های مختلف برای ایجاد رکوردهای مرتبط استفاده کنید تا یک نسخه واحد از آن مدل برای همه روابط در فرآیند ساخت داده‌ها استفاده شود.
Ticket::factory()->recycle(Airline::factory()->create())->create();


در اینجا، ابتدا یک ایرلاین جدید ایجاد می‌شود، سپس متد recycle این ایرلاین را برای استفاده در بلیط‌ها و پروازهایی که ایجاد می‌شوند، انتخاب می‌کند. درواقع ایرلاین ایجاد شده در تمام بلیط‌ها و پروازهای موجود از قبل استفاده می‌شود.

🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
4👍2
⚜️ دوره لاراول - قسمت نوزدهم
📚 مینی پروژه TODo App - ساخت داکیومنت + حل مشکلات جزئی - پایان مینی پروژه

خلاصه :
توی این ویدیو به ادامه مینی پروژه پرداختیم و برای api ای که در قسمت های قبل توسعه دادیم داکیومنت ساختیم و یه سری مشکلات ریز وجود داشت که حل کردیم... با این ویدیو عملا پرونده بخش مینی پروژه بسته میشه و از این به بعد میرسیم سراغ ادامه آموزش ها.

✳️ کد های این مینی پروژه روی گیت هاب قرار گرفته.

توی قسمت های بعدی این مجموعه رو ادامه میدیم.

🎞 لینک ویدیو:
https://youtu.be/BcWH85FtUN0

🔗 Github Repo

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
👍84
فصل پنج - Migrations and Database

بخش سوم - Seeders


‏Seeder یکی از ابزارهای لاراول است که برای وارد کردن داده‌های اولیه یا نمونه به پایگاه داده استفاده می‌شود. این ابزار به توسعه‌دهندگان کمک می‌کند تا داده‌های لازم برای تست یا مقداردهی اولیه پایگاه داده را به صورت خودکار و سریع ایجاد کنند.

فرض کنید می‌خواهید جدول cities را با داده‌های اولیه شهرها پر کنید. این جدول ممکن است شامل نام شهرها و استان‌های آن‌ها باشد.

1- ایجاد Seeder
ابتدا Seeder جدیدی برای جدول شهرها ایجاد می‌کنیم، این کار به وسیله دستور زیر انجام می شود:
php artisan make:seeder CitySeeder


2- پر کردن Seeder
فایل database/seeders/CitySeeder.php را باز کرده و داده‌های اولیه را به صورت دستی وارد کنید:
namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\City;

class CitySeeder extends Seeder
{
public function run()
{
$cities = [
['name' => 'Tehran', 'province' => 'Tehran'],
['name' => 'Mashhad', 'province' => 'Khorasan Razavi'],
['name' => 'Isfahan', 'province' => 'Isfahan'],
['name' => 'Shiraz', 'province' => 'Fars'],
['name' => 'Tabriz', 'province' => 'East Azerbaijan'],
];

foreach ($cities as $city) {
City::create($city);
}
// Or using query builder:
//City::insert($cities);
}
}


3- اجرای Seeder
برای اجرای Seeder شهرها، از دستور زیر استفاده کنید:
php artisan db:seed --class=CitySeeder


یا برای اجرای تمامی سیدر ها:
php artisan db:seed


گاهی در محیط پروداکشن سیدر ها ممکن است برای محافط از آسیب داده ها اجرا نشوند، برای این کار می توان از فلگ —force استفاده کرد، اما مراقب داده های خود باشید:
php artisan db:seed --force


پس از اجرای Seeder، جدول cities با داده های مشخص شده پر خواهد شد.

این روش برای مقداردهی اولیه داده‌های ثابت مانند شهرها، دسته‌بندی‌ها، یا تنظیمات بسیار مفید است و در زمان تست یا توسعه پروژه استفاده می‌شود.

استفاده از فکتوری ها در سیدر:
همچنین می توانید یک فکتوری را در سیدر خود فراخوانی کنید و داده های تستی خود را از فکتوری ایجاد کنید:
# UserSeeder.php
public function run(): void
{
User::factory()
->count(50)
->hasPosts(1)
->create();
}


فراخوانی سیدر های اضافی در یک سیدر:
همچنین می توانید از متد call استفاده کنید و سیدر های دیگری را در سیدر خود فراخوانی و اجرا کنید:
# FolanSeeder.php
public function run(): void
{
$this->call([
UserSeeder::class,
PostSeeder::class,
CommentSeeder::class,
]);
}


بی صدا کردن رویداد های مدل:
درصورت اجرای سیدر و ایجاد رکورد ها، رویداد های مدل ها نیز فراخوانی می شوند، شما می توانید با استفاده از تریت WithoutModelEvents، مانع فراخوانی این سیدر ها شوید:
class DatabaseSeeder extends Seeder
{
use WithoutModelEvents;

public function run(): void
{
$this->call([
UserSeeder::class,
]);
}
}


🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
5👍2
⚜️ دوره لاراول - قسمت نوزدهم
📚 الکوئنت ، فکتوری‌ها | Eloquent Factories

خلاصه :
توی این قسمت با فکتوری‌ها اشنا شدیم کمی باهاشون کار کردیم ، برای پست‌ها فکتوری ساختیم و استفاده کردیم.

توی قسمت های بعدی این مجموعه رو ادامه میدیم.

🎞 لینک ویدیو:
https://youtu.be/Gh-fbsUupLE

🔖 #Laravel, #PHP, #لاراول

👤 Matin Soleymani

💎 Channel: @DevelopixLaravel
6
فصل پنج - Migrations and Database

بخش چهارم - اتصالات دیتابیس


در لاراول، مدیریت چندین اتصال به دیتابیس و استفاده از دیتابیس‌های مختلف به صورت ساده‌ای امکان‌پذیر است.

- چندین اتصال به دیتابیس


برای مدیریت چندین اتصال به دیتابیس فایل تنظیمات config/database.php را باز کنید. در آرایه‌ی connections، می‌توانید چندین کانکشن مختلف تعریف کنید.
مثال:
'connections' => [
'mysql' => [
// ...
],
'mysql_second' => [
// ...
],
]


در اینجا دو کانکشن مختلف با نام های mysql و mysql_second را پیکربندی می کنیم.

——————

- استفاده از چندین کانکشن در کد

پس از تعریف کانکشن‌ها در فایل تنظیمات، می‌توانید به صورت زیر از آن‌ها استفاده کنید:
// connect to 'mysql'
$data = DB::connection('mysql')->select('SELECT * FROM users');

// connect to 'mysql_second'
$data = DB::connection('mysql_second')->select('SELECT * FROM products');

// In migrations
public function up()
{
Schema::connection('mysql_second')->create('products', function (Blueprint $table) {
// ...
});
}


همچنین در یک مدل خاص می‌توانید کانکشن را مشخص کنید:
class Product extends Model
{
protected $connection = 'mysql_second';
}


——————

- استفاده از MongoDB

برای استفاده از MongoDB در لاراول، می‌توانید از پکیج رسمی mongodb/laravel-mongodb استفاده کنید. این پکیج توسط MongoDB نگهداری می‌شود و ادغام کاملی با Eloquent و سایر ویژگی‌های لاراول فراهم می‌کند. در ادامه، مراحل نصب و پیکربندی این پکیج را توضیح می‌دهم:

با استفاده از Composer، پکیج را به پروژه خود اضافه کنید:
composer require mongodb/laravel-mongodb


پس از نصب پکیج، باید تنظیمات مربوط به اتصال به دیتابیس MongoDB را در فایل config/database.php اضافه کنید. در بخش connections، کانکشن mongodb را به صورت زیر تعریف کنید:
'connections' => [
// others...

'mongodb' => [
'driver' => 'mongodb',
'dsn' => env('MONGODB_URI', 'mongodb://localhost:27017'),
'database' => env('MONGODB_DATABASE', 'laravel_app'),
],
],


پس از آن با کانکشن mongodb به دیتابیس mongodb خود متصل شوید.

——————

- استفاده از Redis در لاراول

لاراول به صورت داخلی از Redis پشتیبانی می‌کند.
تنظیمات Redis را می توانید در فایل config/database.php بررسی کنید.
در این دوره استفاده از ردیس به طور کامل بررسی نمی شود، اما تمامی متد های ردیس از فساد Redis در دسترس هستند:
use Illuminate\Support\Facades\Redis;

Redis::set('key', 'value');

$value = Redis::get('key');


🔖 #Laravel, #PHP, #فصل_۵, #لاراول

👤 AmirHossein

💎 Channel: @DevelopixLaravel
👍64
خروجی حلقه کدام است؟

1️⃣ Error
2️⃣ 10 9 8 7 6 5 4 3 2 1
3️⃣ Warning
4️⃣ 9 8 7 6 5 4 3 2 1 0

پاسخ خود را همراه با توضیح ارائه دهید.

بدون اجرای کد یا استفاده از هوش مصنوعی، کمی فکر کنید.

🔖 #PHP, #پی_اچ_پی, #چالش

👤 AmirHossein

💎 Channel: @DevelopixPHP
1