?? ??? ?? ????? ?
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 9 months, 1 week ago
[ We are not the first, we try to be the best ]
Last updated 11 months, 3 weeks ago
FAST MTPROTO PROXIES FOR TELEGRAM
ads : @IR_proxi_sale
Last updated 7 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');
```
**فصل پنج - 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,
]);
}
}
```
**فصل پنج - 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 این ایرلاین را برای استفاده در بلیطها و پروازهایی که ایجاد میشوند، انتخاب میکند. درواقع ایرلاین ایجاد شده در تمام بلیطها و پروازهای موجود از قبل استفاده میشود.
**فصل پنج - 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');
فصل 4 اینجا به پایان رسید. این فصل طولانی ترین فصل بود، و سایر فصل ها سریع تر پیش میرن. اگر چیزی در رابطه با الوکوئنت و مدل ها جا مونده بگید توضیح بدیم و فصل 5 رو شروع کنیم.
**فصل پنج - 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 #لاراول #فصل_۵
? @AmirhDeveloper
.
فصل چهار - مدلها و 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 #لاراول #فصل_۴
✅ @AmirhDeveloper
.
**فصل سه - 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
?? ??? ?? ????? ?
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 9 months, 1 week ago
[ We are not the first, we try to be the best ]
Last updated 11 months, 3 weeks ago
FAST MTPROTO PROXIES FOR TELEGRAM
ads : @IR_proxi_sale
Last updated 7 months, 3 weeks ago