برنامه نویس فان | Fun Developer یک آدم ساده که عاشق برنامه نویسی و کد زدنه :) تلاش میکنه تا به بقیه کمک کنه. توسعه دهنده هسته لاراول و فضای اوپن سورس. فاندر پرانتز و کد نیوز.
امروز میخوایم در مورد آپدیت جدید لاراول یعنی 11.22 صحبت کنیم. در این آپدیت ما یک متد جدید در الوکوئنت داریم به نام "chaperone()" همینطور پشتیبانی روت ها از Enum و... .
Chaperone Eloquent
ما در این آپدیت یک متد جدید در الوکوئنت داریم به نام chaperone
. خیلی اوقات در پروژه اتون مشکلی به نام N+1 داشتید و یادتون رفته که این مشکل رو درست کنید. حالا شما میتونید با این متد از این مشکل جلوگیری کنید، یعنی دیگه موقع لود یک مدل خودش ریلیشن رو لود میکنه.
مثلا در اینجا ما یک مدل به نام Comment
. حالا ما میخوایم بگیم که آقا موقع لود ریلیشن product
هم لود کن. میتونید به شکل زیر عمل کنید:
public function comments(): HasMany
{
return $this->hasMany(Comment::class)->chaperone('product');
}
برای دیدن این Pull Request کلیک کنید.
پشتیبانی از Backed Enum در Queue ها
در این آپدیت متد های "()onQueue()
" و "onConnection()
" و "allOnQueue
" و "allOnConnection()
" در Queue ها از Enum ها پشتیبانی میکنند:
public function notify()
{
$user = ...;
VerificationJob::dispatch($user)
->withConnection(QueueConnectionEnum::KAFKA->value)
->onQueue(QueueNameEnum::HIGH->value);
}
// After
public function notify()
{
$user = ...;
VerificationJob::dispatch($user)
->withConnection(QueueConnectionEnum::KAFKA)
->onQueue(QueueNameEnum::HIGH);
}
برای دیدن این Pull Request کلیک کنید.
پشتیبانی روت ها از Enum ها
در این آپدیت شما میتونید از Enum ها در متد های "name()
" و "domain()
" در روت ها استفاده کنید:
// Before
Route::domain(DomainEnum::APP->value)
->name(NameEnum::ABOUT->value)
->get('/about-us', AboutController::class);
// After
Route::domain(DomainEnum::APP)
->name(NameEnum::ABOUT)
->get('/about-us', AboutController::class);
برای دیدن این Pull Request کلیک کنید.
پشتیبانی از Closure در متد "()whereAny"
در این آپدیت شما میتونید یک آرایه از Closure به متد whereAny ارسال کنید:
// Before
User::query()
->where(fn(Builder $query) => $query->one())
->orWhere(fn(Builder $query) => $query->two())
->orWhere(fn(Builder $query) => $query->three());
// After
User::query()
->whereAny([
fn(Builder $query) => $query->one(),
fn(Builder $query) => $query->two(),
fn(Builder $query) => $query->three(),
]);
برای دیدن این Pull Request کلیک کنید.
پشتیبانی از ایونت های خاص در Vite
در این آپدیت شما میتونید یک ایونت خاص برای Vite ست کنید:
// Service provider
use IlluminateSupportFacadesVite;
Vite::prefetch(
concurrency: 3,
event: 'vite:prefetch',
]);
در سمت فرانت:
addEventListener('load', () => {
setTimeout(() => dispatchEvent(new Event('vite:prefetch')), 1000)
})
برای دیدن این Pull Request کلیک کنید.
تغییرات جزئی:
- فیکس کردن docblock کلاس FoundationServiceProvider در پراویدر ها - #52542
- فیکس کردن پارامتر - #52541
- اضافه کردن نوع به پارامتر ها - #52536
- اضافه شدن متد "()prefetch" به Vite - #52550
- پشتیبانی از PHP 8.4 برای کلاس PDO در دیتابیس - #52538
- آپدیت کردن ورژن لینوکس های گیت هاب اکشن - #52566
- فیکس کردن متن کامنت - #52564
- پشتیبانی از CSP nonce در Viteی - #52558
- فیکس کردن متد sort برای SORT_NATURAL در کالکشن ها - #52557
- آپدیت کردن پیام ها برای قطع شدن ارتباط های دیتابیس - #52614
- فیکس کردن docblock متد "()getEventDispatcher" در مدل ها - #52602
- آپدیت کردن docblock فانکشن "()throwUnless" درHttp کلاینت - #52626
- فیکس کردن docblock در متد "()hash" در فایل سیستم - #52630
اولین نفر باش که نظر ثبت میکنی :) یعنی یه کامنت به ما نمیرسه 😁