| کانال توسعه‌دهندگان لاراول |

Description
⭕️ کانال توسعه‌دهندگان لاراول دولوپیکس

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

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
We recommend to visit

?? ??? ?? ????? ?

We comply with Telegram's guidelines:

- No financial advice or scams
- Ethical and legal content only
- Respectful community

Join us for market updates, airdrops, and crypto education!

Last updated 7 months, 2 weeks ago

[ We are not the first, we try to be the best ]

Last updated 10 months ago

FAST MTPROTO PROXIES FOR TELEGRAM

ads : @IR_proxi_sale

Last updated 6 months ago

5 months, 3 weeks ago

**فصل پنج - 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

5 months, 3 weeks ago

**فصل پنج - 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

6 months, 1 week ago

**فصل پنج - 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

7 months, 2 weeks ago

**فصل پنج - 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

7 months, 4 weeks ago

**فصل پنج - 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

7 months, 4 weeks ago

**فصل پنج - 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

10 months, 3 weeks ago

**فصل چهار - مدل‌ها و Eloquent ORM

بخش اول - معرفی Eloquent**

الوکوئنت (Eloquent) یکی از بخش‌های مهم و قدرتمند فریمورک لاراول است که به عنوان ORM (Object-Relational Mapping) عمل می‌کند. ORM یک تکنیک برنامه‌نویسی است که به توسعه‌دهندگان اجازه می‌دهد تا با پایگاه داده به صورت شیء‌گرا کار کنند و جداول پایگاه داده را به کلاس‌های PHP تبدیل کنند.

کارکرد اصلی الوکوئنت:
الکوئنت به شما امکان می‌دهد تا با استفاده از مدل‌های شیء‌گرا (Objects)، داده‌های پایگاه داده را دستکاری کنید. این به شما اجازه می‌دهد که به جای نوشتن کوئری‌های SQL خام، از متدهای شیء‌گرای الوکوئنت استفاده کنید که کد را تمیزتر و قابل‌فهم‌تر می‌کند.

ویژگی‌ها و قابلیت‌های الوکوئنت:
1- تعریف مدل‌ها: در الوکوئنت، هر جدول پایگاه داده با یک مدل مطابقت دارد. این مدل‌ها کلاس‌هایی هستند که رفتارها و ویژگی‌های مرتبط با جداول پایگاه داده را مشخص می‌کنند. همچنین یکی از سه بخش معماری MVC را تشکیل می دهند.

2- روابط: الوکوئنت به شما امکان می‌دهد تا روابط بین جداول را به راحتی تعریف کنید. برای مثال:

ارتباط یک به یک (One to One).
ارتباط یک به چند (One to Many).
ارتباط چند به چند (Many to Many).
ارتباطات چندشکلی که یک مدل می‌تواند با چندین مدل دیگر مرتبط باشد (Polymorphic).

3- اسکوپ‌های عمومی و محلی: می‌توانید کوئری‌های عمومی که به صورت مکرر استفاده می‌شوند را در مدل تعریف کنید (Global Scopes) یا متدهایی ایجاد کنید که اسکوپ‌های محلی را تعریف کنند (Local Scopes).

4- پیمایشگرها و دسترسی‌گرها (Mutators and Accessors): به شما اجازه می‌دهد تا رفتارهای خاصی را هنگام تنظیم یا گرفتن ویژگی‌های یک مدل اعمال کنید.

5- رخدادها (Events): الوکوئنت دارای سیستم رخدادهایی است که شما می‌توانید به آن‌ها گوش دهید و به ازای رویدادهایی مانند creating, updating, deleting و غیره واکنش نشان دهید.

6- کوئری‌سازی شیء‌گرا (Object-Oriented Querying): الکوئنت به شما اجازه می‌دهد تا به جای استفاده از SQL خام، از متدهای شیء‌گرا برای ایجاد کوئری‌ها استفاده کنید. این کوئری‌ها شامل فیلتر کردن، مرتب‌سازی، گروه‌بندی و سایر عملیات‌های پیچیده می‌شود، بدون اینکه نیازی به نوشتن یک خط SQL باشد.

7- مهاجرت‌ها (Migrations) و بذرها (Seeders): در کنار مدل‌های الوکوئنت، لاراول ابزارهایی برای مدیریت ساختار پایگاه داده (مهاجرت‌ها) و پر کردن جداول با داده‌های نمونه (سیدر و فکتوری) فراهم می‌کند. این ابزارها به توسعه‌دهندگان کمک می‌کنند تا به‌راحتی پایگاه داده‌های خود را ایجاد و مدیریت کنند.

8- پشتیبانی از Eager Loading و Lazy Loading: الکوئنت از دو روش برای بارگذاری داده‌های مرتبط با مدل‌ها پشتیبانی می‌کند:

بارگذاری (Eager): این روش به شما امکان می‌دهد داده‌های مرتبط با یک مدل را همزمان با فراخوانی مدل بارگذاری کنید تا از تعداد کوئری‌های اضافی جلوگیری شود.

بارگذاری (Lazy): این روش زمانی داده‌های مرتبط را بارگذاری می‌کند که به آن‌ها نیاز داشته باشید. این ممکن است منجر به ارسال کوئری‌های اضافی به پایگاه داده شود.

9- پشتیبانی از Soft Deletes: الکوئنت امکان (Soft Delete) را فراهم می‌کند که به جای حذف دائمی یک رکورد، آن را "پنهان" می‌کند تا بعداً بتوان آن را بازیابی کرد. این کار از طریق یک فیلد اضافی در جدول انجام می‌شود که تاریخ و زمان حذف را ثبت می‌کند.

10- و...

مزایا و کاربردهای عملی:

استفاده از الوکوئنت باعث می‌شود که کدها به مراتب خواناتر و قابل نگهداری‌تر باشند.

نیاز به نوشتن کوئری‌های SQL به حداقل می‌رسد و توسعه‌دهنده می‌تواند روی منطق برنامه تمرکز کند.

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

الوکوئنت برای توسعه‌دهندگانی که از لاراول برای ساخت برنامه‌های وب استفاده می‌کنند، ابزاری ضروری است. این ابزار در تمامی جنبه‌های کار با پایگاه داده از جمله تعریف مدل‌ها، روابط، کوئری‌سازی و حتی مدیریت مهاجرت‌های پایگاه داده (Database Migrations) کاربرد دارد.

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

در بخش های بعدی با تمام موارد نام برده شده به طور مفصل آشنا خواهیم شد.

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

? AmirHossein

? Channel: @DevelopixLaravel

10 months, 3 weeks ago

**فصل سه - Views

بخش سوم - کامپوننت ها - قسمت چهارم**

درصورتی که یک پکیج توسعه می دهید که شامل چندین کامپوننت می باشد، می توانید به صورت زیر آن را در پروژه ها لود کنید:

ابتدا در یک پروایدر مانند App\Providers\AppServiceProvider.php درون متد boot یک نیم اسپیس را به پکیج خود اختصاص می دهید:

public function boot(): void { Blade::componentNamespace('Nightshade\\Views\\Components', 'nightshade'); }

در مثال بالا nightshade برابر با نیم اسپیس داده شده می باشد.
و سپس برای استفاده:

<x\-nightshade::calendar />

کامپوننت calendar از نیم اسپیس nightshade که در پروایدر تعریف کرده ایم فراخوانی خواهد شد.

متد های داینامیک:

علاوه بر داینامیک بودن متغیر ها در views، متد ها نیز قابل استفاده هستند:
شما میتوانید درون کلاس کامپوننت خود یک متد را تعریف کنید و به صورت invoke درون view استفاده کنید:

public function isSelected(string $option): bool { return $option === $this\->selected; }

برای استفاده:

```

{{ $label }}

```

کامپوننت های خطی یا inline:
درصورتی که یک کامپوننت خیلی کوچک نیاز دارید میتوانید با دستور زیر یک کاپوننت اینلاین ایجاد کنید.

php artisan make:component Alert \-\-inline

این کامپوننت ها تنها از یک کلاس تشکیل شده اند و فایل view ندارند.
کافی است درون متد render کد های HTML خود را قرار دهید:

```
public function render(): View|Closure|string
{
return <<<'blade'

blade;
}
```

دستورات Blade سفارسی:

گاهی نیاز است دستورات Blade خود را پیاده سازی کنیم، در ادامه به متد های آن می پردازیم.
تمامی متد ها از فساد Blade قابل دسترس هستند.

1- متد directive:
این متد برای تعریف یک دایرکتیو سفارشی استفاده می‌شود. شما می‌توانید یک دایرکتیو سفارشی با نام دلخواه خود ایجاد کنید که در قالب‌های Blade قابل استفاده باشد.

Blade::directive('datetime', function ($expression) { return "<?php echo ($expression)\->format('m/d/Y H:i'); ?>"; });

برای استفاده:

@datetime($post\->created\_at)

2- متد if:
این متد برای ایجاد دایرکتیوهای شرطی (conditional directives) استفاده می‌شود. این دایرکتیوها به شما امکان می‌دهند تا شرط‌های پیچیده را به صورت خواناتر و ساده‌تر در قالب‌های Blade بنویسید.

```
use Illuminate\Support\Facades\Blade;

Blade::if('admin', function () {
return isAdmin(); // isAdmin() not a valid function
});
```

برای استفاده:

@admin <p>You are an admin.</p> @else <p>You are not an admin.</p> @endadmin

3- متد component:
این متد به شما امکان می‌دهد تا یک کامپوننت کلاس Blade یا یک ویوی Blade را به یک دایرکتیو خاص متصل کنید.

Blade::component('alert', 'components.alert');

برای استفاده:

@alert(['type' => 'danger']) This is a warning alert! @endalert

4- متد include:
این متد برای تعریف یک دایرکتیو سفارشی که یک ویوی خاص را شامل می‌شود، استفاده می‌شود. این روش بسیار مشابه استفاده از @include است اما با دایرکتیو خاص خودتان.

Blade::include('components.alert', 'alert');

برای استفاده:

@alert(['type' => 'danger']) This is a warning alert! @endalert

? #Laravel, #PHP, #لاراول, #فصل_۳

? AmirHossein

? Channel: @DevelopixLaravel

10 months, 4 weeks ago

**فصل سه - Views

بخش سوم - کامپوننت ها - قسمت سوم**

ویژگی $attributes به طور خودکار تمامی ویژگی‌های اضافی‌ای که به یک کامپوننت Blade پاس داده می‌شوند را مدیریت می‌کند.
این ویژگی شامل متدهای متعددی برای کار با اتریبیوت ها می‌شود.

1- متد merge:
این متد به شما اجازه می‌دهد که ویژگی‌های جدیدی را به مجموعه ویژگی‌های موجود اضافه کنید و در صورت وجود ویژگی‌های تکراری، آن‌ها را ادغام کنید. معمولاً برای کلاس‌های CSS استفاده می‌شود.

```

merge(['class' => 'alert alert\-' . $type]) }}> {{ $slot }}

```

اگر کلاس‌های CSS به این کامپوننت پاس داده شوند، merge آن‌ها را با کلاس‌های پیش‌فرض ترکیب می‌کند. برای مثال:

<x\-alert type="success" class="my\-custom\-class"> Success! </x\-alert>

کلاس نهایی ترکیب شده به صورت alert alert-success my-custom-class خواهد بود.

2- متد class:
این متد به طور خاص برای کار با کلاس‌های CSS استفاده می‌شود. شما می‌توانید کلاس‌های جدیدی اضافه کنید یا کلاس‌های موجود را با شرط‌هایی مدیریت کنید.

```

class(['alert', 'alert\-' . $type, 'font\-bold' => $isBold]) }}> {{ $slot }}

```

اگر $isBold مقدار true داشته باشد، کلاس font-bold اضافه می‌شود.

3- متد prepend:
این متد برای افزودن ویژگی‌های جدید به ابتدا (اولویت) مجموعه ویژگی‌های موجود استفاده می‌شود. اگر ویژگی مورد نظر قبلاً موجود باشد، مقدار جدید در ابتدا اضافه می‌شود.

```

prepend('class', 'font\-bold') }}> {{ $slot }}

```

اگر کامپوننت قبلاً دارای کلاس font-bold نباشد، به ابتدای لیست کلاس‌ها اضافه می‌شود.

4- متد filter:
این متد به شما اجازه می‌دهد که ویژگی‌ها را بر اساس یک شرط فیلتر کنید.

```

filter(fn ($value, $key) => $key === 'class' || $key === 'id') }}> {{ $slot }}

```

در این مثال، فقط ویژگی‌های class و id نگه داشته می‌شوند و سایر ویژگی‌ها فیلتر می‌شوند.

5- متد whereStartsWith:
این متد ویژگی‌هایی را که کلید آن‌ها با رشته خاصی شروع می‌شود، فیلتر می‌کند.

```

whereStartsWith('data\-') }}> {{ $slot }}

```

این کد تمام ویژگی‌هایی که با data- شروع می‌شوند را به div اضافه می‌کند.

6- متد whereDoesntStartWith:
این متد ویژگی‌هایی که کلید آن‌ها با رشته خاصی شروع نمی‌شود را فیلتر می‌کند.

```

whereDoesntStartWith('wire:') }}> {{ $slot }}

```

این کد تمام ویژگی‌هایی که با wire: شروع نمی‌شوند را نگه می‌دارد.

7- متد has:
این متد بررسی می‌کند که آیا یک ویژگی خاص در مجموعه ویژگی‌ها وجود دارد یا خیر.

@if ($attributes\->has('class')) <div {{ $attributes }}> {{ $slot }} </div> @else <div class="default\-class"> {{ $slot }} </div> @endif

این کد بررسی می‌کند که آیا ویژگی class وجود دارد و در صورت عدم وجود، یک کلاس پیش‌فرض استفاده می‌کند.

8- متد hasAny:
این متد بررسی می‌کند که آیا هر یک از ویژگی‌های مورد نظر در مجموعه وجود دارند یا خیر.

@if ($attributes\->hasAny(['class', 'id'])) <div {{ $attributes }}> {{ $slot }} </div> @endif

این کد بررسی می‌کند که آیا یکی از ویژگی‌های class یا id وجود دارند و در صورت وجود، div را با آن‌ها رندر می‌کند.

9- متد get:
این متد مقدار یک ویژگی خاص را برمی‌گرداند. اگر ویژگی وجود نداشته باشد، می‌توانید یک مقدار پیش‌فرض برای آن تعیین کنید.

```

{{ $slot }}

```

در اینجا، اگر ویژگی id پاس داده نشده باشد، مقدار پیش‌فرض default-id استفاده می‌شود.

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

? #Laravel, #PHP, #لاراول, #فصل_۳

? AmirHossein

? Channel: @DevelopixLaravel

We recommend to visit

?? ??? ?? ????? ?

We comply with Telegram's guidelines:

- No financial advice or scams
- Ethical and legal content only
- Respectful community

Join us for market updates, airdrops, and crypto education!

Last updated 7 months, 2 weeks ago

[ We are not the first, we try to be the best ]

Last updated 10 months ago

FAST MTPROTO PROXIES FOR TELEGRAM

ads : @IR_proxi_sale

Last updated 6 months ago