Forwarded from Anophel | آنوفل
در PHP 8.1 و بالاتر، میتوان از Enum ها برای تعریف مجموعهای از ثابتها که با هم مرتبط هستند استفاده کرد. Enum (مخفف Enumeration) یک نوع داده خاص است که شامل مجموعهای از مقادیر ثابت و از پیش تعریفشده است. این مقادیر معمولاً با هم مرتبط هستند و به یک مفهوم خاص اشاره میکنند. به عنوان مثال، میتوان برای وضعیتهای مختلف یک سفارش (مانند "در انتظار"، "در حال پردازش"، "ارسال شده" و غیره) یک Enum تعریف کرد.
کی از Enum استفاده کنیم؟
تعریف مجموعهای از مقادیر ثابت و مرتبط: زمانی که مجموعهای از مقادیر ثابت وجود دارد که با هم مرتبط هستند و نیاز به مدیریت آنها دارید، میتوان از Enum استفاده کرد. مانند وضعیتهای مختلف یک سفارش، روزهای هفته، ماههای سال و غیره.
خوانایی و نگهداری بهتر کد: استفاده از Enum به کد شما خوانایی بیشتری میبخشد و همچنین از خطاهای ناشی از استفاده نادرست از مقادیر جلوگیری میکند.
جلوگیری از استفاده نادرست از مقادیر: وقتی که مقادیر ثابت را به صورت Enum تعریف میکنید، کامپایلر یا مفسر برنامه در برابر استفاده نادرست از این مقادیر به شما هشدار میدهد یا مانع از آن میشود.
کاهش استفاده از "عددهای جادویی": استفاده از Enum به جای اعداد یا رشتههای ثابت پراکنده در کد، باعث میشود که کد تمیزتر و قابل فهمتر باشد.
در اینجا یک مثال از یک Enum برای وضعیتهای یک سفارش در یک سیستم خرید آورده شده است.
ویژگیهای Enum در PHP:
1. تعریف به صورت Enum : Enum ها با استفاده از کلمه کلیدی enum تعریف میشوند.
2. مقادیر ثابت: Enum ها مجموعهای از مقادیر ثابت را تعریف میکنند که با هم مرتبط هستند.
3. پشتیبانی از انواع داده: Enum ها میتوانند انواع دادهای مختلف مثل string یا int را به عنوان مقدار خود داشته باشند.
4. قابلیت استفاده در توابع: Enum ها میتوانند به عنوان پارامتر به توابع و متدها ارسال شوند.
5. سازگاری با Match Expression: از match expression میتوان برای پردازش مقادیر Enum استفاده کرد.
6. تعریف متدها: میتوان متدهایی را در داخل Enum تعریف کرد که به مقادیر آن مرتبط هستند.
من در Anophel آنوفل بیشتر به این موضوع پرداختم لینک مقاله :
لینک مقاله
#لاراول #php
کی از Enum استفاده کنیم؟
تعریف مجموعهای از مقادیر ثابت و مرتبط: زمانی که مجموعهای از مقادیر ثابت وجود دارد که با هم مرتبط هستند و نیاز به مدیریت آنها دارید، میتوان از Enum استفاده کرد. مانند وضعیتهای مختلف یک سفارش، روزهای هفته، ماههای سال و غیره.
خوانایی و نگهداری بهتر کد: استفاده از Enum به کد شما خوانایی بیشتری میبخشد و همچنین از خطاهای ناشی از استفاده نادرست از مقادیر جلوگیری میکند.
جلوگیری از استفاده نادرست از مقادیر: وقتی که مقادیر ثابت را به صورت Enum تعریف میکنید، کامپایلر یا مفسر برنامه در برابر استفاده نادرست از این مقادیر به شما هشدار میدهد یا مانع از آن میشود.
کاهش استفاده از "عددهای جادویی": استفاده از Enum به جای اعداد یا رشتههای ثابت پراکنده در کد، باعث میشود که کد تمیزتر و قابل فهمتر باشد.
در اینجا یک مثال از یک Enum برای وضعیتهای یک سفارش در یک سیستم خرید آورده شده است.
ویژگیهای Enum در PHP:
1. تعریف به صورت Enum : Enum ها با استفاده از کلمه کلیدی enum تعریف میشوند.
2. مقادیر ثابت: Enum ها مجموعهای از مقادیر ثابت را تعریف میکنند که با هم مرتبط هستند.
3. پشتیبانی از انواع داده: Enum ها میتوانند انواع دادهای مختلف مثل string یا int را به عنوان مقدار خود داشته باشند.
4. قابلیت استفاده در توابع: Enum ها میتوانند به عنوان پارامتر به توابع و متدها ارسال شوند.
5. سازگاری با Match Expression: از match expression میتوان برای پردازش مقادیر Enum استفاده کرد.
6. تعریف متدها: میتوان متدهایی را در داخل Enum تعریف کرد که به مقادیر آن مرتبط هستند.
من در Anophel آنوفل بیشتر به این موضوع پرداختم لینک مقاله :
لینک مقاله
#لاراول #php
Anophel
Anophel | Where Developers Create Their Own Path
Anophel is an ecosystem for developers—a place for those who prefer building over consuming. If you want to create tools, think differently, and forge your own path in coding, Anophel is with you.
👍6🔥2❤1
🎯 استفاده از متغیر $loop در حلقههای foreach@ در Laravel Blade
یکی از قابلیتهای قدرتمند و کمتر شناختهشدهی blade وجوده متغیری به نام $loop در هنگام استفاده از دستور foreach@ است. این متغیر بهصورت خودکار و فقط درون حلقه در دسترس قرار میگیره و اطلاعات بسیار مفیدی درباره وضعیت فعلی تکرار حلقه فراهم میکنه.
کاربردهای عملی $loop :
زمانیکه در یک Blade از foreach@ استفاده میکنید، لاراول بطور خودکار یک شیء Loop اختصاصی تولید میکنه که مهم هاشو نوشتم براتون :
🔹 $loop->index
int — شماره اندیس فعلی (از 0 شروع میشه)
🔹 $loop->iteration
int — شماره تکرار (از 1 شروع میشه)
🔹 $loop->count
int — تعداد کل آیتمها در حلقه
🔹 $loop->first
bool — آیا این اولین تکراره؟ (true/false)
🔹 $loop->last
bool — آیا این آخرین تکراره؟ (true/false)
🔹 $loop->remaining
int — چند آیتم دیگه تا پایان حلقه باقی مونده
🔹 $loop->even
bool — آیا تکرار فعلی زوجه؟
🔹 $loop->odd
bool — آیا تکرار فعلی فرده؟
🔹 $loop->depth
int — عمق حلقه (در حلقههای تو در تو)
🔹 $loop->parent
object|null — دسترسی به حلقهی والد در صورت وجود
مثال؟؟
درین مثال از $loop->iteration برای شمارهگذاری استفاده شده.
با $loop->odd استایل متفاوت برای ردیفهای فرد و زوج اعمال شده.
اولین و آخرین محصول با نشان خاصی مشخص شدهاند.
نکات مهم:
این $ loop فقط در Blade و فقط در داخل foreach@ (یا for@) در دسترسه.
اگه حلقههای توو در توو دارید، میتونین از $loop->depth و $loop->parent استفاده کنین.
این قابلیت در Viewها به کاهش پیچیدگی کد و خوانایی بیشتر کمک میکند.
✅ نتیجهگیری
استفاده از $loop در Laravel Blade نهتنها کدنویسی را تمیزتر و خواناتر میکند، بلکه امکاناتی مثل تشخیص اولین یا آخرین آیتم، استایلگذاری زوج و فرد، و شمارنده حلقه را بدون نیاز به تعریف متغیرهای دستی فراهم میکند.
#Laravel
(بهمنبع و مثالش دقت کنید 👇🏾)
@GoldenCodeir
https://x.com/laravelbackpack/status/1929863164302393517?s=35
یکی از قابلیتهای قدرتمند و کمتر شناختهشدهی blade وجوده متغیری به نام $loop در هنگام استفاده از دستور foreach@ است. این متغیر بهصورت خودکار و فقط درون حلقه در دسترس قرار میگیره و اطلاعات بسیار مفیدی درباره وضعیت فعلی تکرار حلقه فراهم میکنه.
کاربردهای عملی $loop :
زمانیکه در یک Blade از foreach@ استفاده میکنید، لاراول بطور خودکار یک شیء Loop اختصاصی تولید میکنه که مهم هاشو نوشتم براتون :
🔹 $loop->index
int — شماره اندیس فعلی (از 0 شروع میشه)
🔹 $loop->iteration
int — شماره تکرار (از 1 شروع میشه)
🔹 $loop->count
int — تعداد کل آیتمها در حلقه
🔹 $loop->first
bool — آیا این اولین تکراره؟ (true/false)
🔹 $loop->last
bool — آیا این آخرین تکراره؟ (true/false)
🔹 $loop->remaining
int — چند آیتم دیگه تا پایان حلقه باقی مونده
🔹 $loop->even
bool — آیا تکرار فعلی زوجه؟
🔹 $loop->odd
bool — آیا تکرار فعلی فرده؟
🔹 $loop->depth
int — عمق حلقه (در حلقههای تو در تو)
🔹 $loop->parent
object|null — دسترسی به حلقهی والد در صورت وجود
مثال؟؟
<ul>
@foreach ($products as $product)
<li class="{{ $loop->odd ? 'bg-light' : 'bg-dark' }}">
{{ $loop->iteration }}. {{ $product->name }}
@if ($loop->first)
<span class="badge">New!</span>
@endif
@if ($loop->last)
<span class="badge">End</span>
@endif
</li>
@endforeach
</ul>
درین مثال از $loop->iteration برای شمارهگذاری استفاده شده.
با $loop->odd استایل متفاوت برای ردیفهای فرد و زوج اعمال شده.
اولین و آخرین محصول با نشان خاصی مشخص شدهاند.
نکات مهم:
این $ loop فقط در Blade و فقط در داخل foreach@ (یا for@) در دسترسه.
اگه حلقههای توو در توو دارید، میتونین از $loop->depth و $loop->parent استفاده کنین.
این قابلیت در Viewها به کاهش پیچیدگی کد و خوانایی بیشتر کمک میکند.
✅ نتیجهگیری
استفاده از $loop در Laravel Blade نهتنها کدنویسی را تمیزتر و خواناتر میکند، بلکه امکاناتی مثل تشخیص اولین یا آخرین آیتم، استایلگذاری زوج و فرد، و شمارنده حلقه را بدون نیاز به تعریف متغیرهای دستی فراهم میکند.
#Laravel
(بهمنبع و مثالش دقت کنید 👇🏾)
@GoldenCodeir
https://x.com/laravelbackpack/status/1929863164302393517?s=35
X (formerly Twitter)
Backpack for Laravel (@laravelbackpack) on X
1/3. Laravel Tip
Did you know... While iterating through a foreach loop, a $loop variable will be available inside of your loop. This variable provides access to some useful bits of information.
More info in the short 🧵👇
Did you know... While iterating through a foreach loop, a $loop variable will be available inside of your loop. This variable provides access to some useful bits of information.
More info in the short 🧵👇
👍9❤3🔥3
Golden Code
خب حالا بریم سراغ C یا همون Consistency(سازگاری) در ACID: ویژگی Consistency در دیتابیس یعنی بعد از انجام هر transaction، دیتاهامون باید همیشه صحیح و درست باقی بمونن. یعنی دیتابیس نباید هیچ وقت به وضعیتی نادرست یا اشتباه برسه. 📌 اگه transaction ها قوانین…
خب بریم سراغ مفهوم Isolation (جداسازی) در ACID ✅️
وقتی یک برنامه با دیتابیس کار میکنه ممکنه چندین Transaction بطور همزمان اجرا بشن. هر transaction مجموعهای از عملیات روی دادههاس که باید بصورت یک واحد کامل انجام بشه.
مفهومه Isolation اینه که transaction ها باید بصورت جدا و مستقل از هم اجرا بشن، یعنی طوری که عملیات یک transaction تا قبل از پایان کاملش برای transaction های دیگه قابل مشاهده نباشه.
📌 اصلا چرا Isolation مهمه؟
فرض کنین دو transaction همزمان در حال تغییر اطلاعات یک حساب بانکی هستن:
بر فرض transaction اول: ۱۰۰ هزار تومان از حساب کم کنه.
و transaction دوم: ۵۰ هزار تومان به حساب اضافه کنه.
📌 اگه این transaction ها بدرستی جداسازی نشن چی میشه؟؟
ممکنه مقدار نهایی اشتباه محاسبه بشه، مثلاً چون هر transaction دیتاهای transaction دیگه رو نمیبینه یا به صورت ناقص میبینه.
در نتیجه، Isolation تضمین میکنه که transaction ها به گونهای اجرا بشن که انگار پشت سر هم انجام شدن ودر نتیجه، دیتاهامون بدرستی و بصورت سازگار باقی میمونه .
در عمل، سطحهای مختلفی از Isolation وجود داره (مثل Read Uncommitted، Read Committed، Repeatable Read، Serializable) که کنترل میکنن چقد transaction میتونن تغییرات یکدیگر رو ببینن و تداخل داشته باشن.
⚠️ سطح بالا مثل Serializableحداکثر جداسازی رو تضمین میکنه ولی ممکنه باعث کاهش کارایی بشه!
سطحهای پایینتر سرعت بیشتری دارن ولی ممکنه دیتاهامون به شکل موقت ناسازگار دیده بشن.
#ACID
@GoldenCodeir
وقتی یک برنامه با دیتابیس کار میکنه ممکنه چندین Transaction بطور همزمان اجرا بشن. هر transaction مجموعهای از عملیات روی دادههاس که باید بصورت یک واحد کامل انجام بشه.
مفهومه Isolation اینه که transaction ها باید بصورت جدا و مستقل از هم اجرا بشن، یعنی طوری که عملیات یک transaction تا قبل از پایان کاملش برای transaction های دیگه قابل مشاهده نباشه.
📌 اصلا چرا Isolation مهمه؟
فرض کنین دو transaction همزمان در حال تغییر اطلاعات یک حساب بانکی هستن:
بر فرض transaction اول: ۱۰۰ هزار تومان از حساب کم کنه.
و transaction دوم: ۵۰ هزار تومان به حساب اضافه کنه.
📌 اگه این transaction ها بدرستی جداسازی نشن چی میشه؟؟
ممکنه مقدار نهایی اشتباه محاسبه بشه، مثلاً چون هر transaction دیتاهای transaction دیگه رو نمیبینه یا به صورت ناقص میبینه.
در نتیجه، Isolation تضمین میکنه که transaction ها به گونهای اجرا بشن که انگار پشت سر هم انجام شدن ودر نتیجه، دیتاهامون بدرستی و بصورت سازگار باقی میمونه .
در عمل، سطحهای مختلفی از Isolation وجود داره (مثل Read Uncommitted، Read Committed، Repeatable Read، Serializable) که کنترل میکنن چقد transaction میتونن تغییرات یکدیگر رو ببینن و تداخل داشته باشن.
⚠️ سطح بالا مثل Serializableحداکثر جداسازی رو تضمین میکنه ولی ممکنه باعث کاهش کارایی بشه!
سطحهای پایینتر سرعت بیشتری دارن ولی ممکنه دیتاهامون به شکل موقت ناسازگار دیده بشن.
#ACID
@GoldenCodeir
👍4❤1👎1
Forwarded from Milwad Khosravi | میلاد خسروی
در اصل JIT مخفف Just-In-Time compilation هست، یعنی کامپایل همزمان با اجرا. این تکنیک باعث میشه که کدهایی که به صورت معمول تفسیر (interpret) میشن (مثل PHP یا JavaScript)، در زمان اجرا به کد ماشین تبدیل بشن، و این یعنی اجراشون خیلی سریعتر بشه.
- سرعت اجرای بهتر
- کاهش مصرف منابع در برخی سناریوها
- عملکرد نزدیکتر به زبانهای کامپایلشده (مثل C)
🧪 کار JIT در PHP چیه؟
در PHP 8 به بعد، Zend Engine دارای یک JIT Compiler شد. قبل از اون، PHP فقط تفسیر میکرد.
کار JIT باعث میشه:
بخشهایی از کد که زیاد استفاده میشن (مثلاً حلقهها یا توابع پرتکرار)، به کد ماشین واقعی تبدیل بشن.
- پردازش تصویر
- بازیسازی
- پروژههای علمی
- کدهایی که زیاد اجرا میشن مثل فریمورکها یا CMSها
#PHP #JIT #Milwad #Tutorial
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7🔥2👍1
تفاوت get() و lazy() در لاراول ؟
اول get():
تمام رکوردها رو یکباره از دیتابیس میخونه و در حافظه لود میکنه. این روش برای حجم دیتای کم مناسبتره.
اما lazy() :
رکوردها رو بصورت مرحلهای و پشتسرهم (streaming) میخونه. این یعنی حافظه خیلی کمتری مصرف میشه، چون هر بار فقط یک رکورد در حافظه هستش. برای دیتاستهای بزرگ (مثلاً هزاران یا میلیونها ردیف) انتخاب بهتریه.
📌 در واقع، lazy() از متود cursor() استفاده میکنه که یک streaming cursor میسازه و رکوردها رو بصورت on-demand از دیتابیس میخونه.
اگه قراره دادههای زیادی از دیتابیس بخونید و پردازش کنین (مثلاً ۱۰۰هزار رکورد)، حتماً از lazy() استفاده کنید تا مصرف حافظه کنترل بشه و سرور دچار مشکل نشه.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید👇🏾)
https://x.com/laravelbackpack/status/1940734778506121448?s=35
اول get():
تمام رکوردها رو یکباره از دیتابیس میخونه و در حافظه لود میکنه. این روش برای حجم دیتای کم مناسبتره.
اما lazy() :
رکوردها رو بصورت مرحلهای و پشتسرهم (streaming) میخونه. این یعنی حافظه خیلی کمتری مصرف میشه، چون هر بار فقط یک رکورد در حافظه هستش. برای دیتاستهای بزرگ (مثلاً هزاران یا میلیونها ردیف) انتخاب بهتریه.
📌 در واقع، lazy() از متود cursor() استفاده میکنه که یک streaming cursor میسازه و رکوردها رو بصورت on-demand از دیتابیس میخونه.
اگه قراره دادههای زیادی از دیتابیس بخونید و پردازش کنین (مثلاً ۱۰۰هزار رکورد)، حتماً از lazy() استفاده کنید تا مصرف حافظه کنترل بشه و سرور دچار مشکل نشه.
User::lazy()->each(function($user) {
// پردازش کاربرا
});#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید👇🏾)
https://x.com/laravelbackpack/status/1940734778506121448?s=35
X (formerly Twitter)
Backpack for Laravel (@laravelbackpack) on X
#Laravel lazy() vs get()
Did you know.... You can stream large datasets from the DB using lazy() — way more memory-efficient than get().
Did you know.... You can stream large datasets from the DB using lazy() — way more memory-efficient than get().
❤8👏1
در زمان اجرای یک درخواست HTTP در لاراول، عملیات Route Model Binding دقیقاً در چه مرحلهای انجام میشه؟
Anonymous Quiz
20%
قبل از اجرای middleware ها
40%
بعد از اجرای middleware ها و قبل از اجرای کنترلر
16%
همزمان با resolve شدن کنترلر
25%
هنگام boot شدن سرویسها در AppServiceProvider
❤5👍3🔥1
در لاراول وقتی مدلی (مثل Comment, Image, یا Like) میتونه به چند مدل مختلف تعلق داشته باشه، از روابط Polymorphic استفاده میکنیم.
برای پیادهسازی این رابطه، معمولاً به دو ستون نیاز داریم:
*_id → آیدیه مدل والد
*_type → نام کامل کلاس مدل والد
بجای ساخت این ستونها بصورت دستی، لاراول یه سری روش ارائه داده که کارو سادهتر و خواناتر میکنه.
🔹 morphs('name')
نوع ID: bigInteger → پیشفرض و متداول
🔹 uuidMorphs('name')
نوع ID: UUID → وقتی مدلها از UUID استفاده میکنن
🔹 ulidMorphs('name')
نوع ID: ULID → مناسب پروژههای مدرن
یه مثال:
📌 این خط بصورت خودکار این دو ستون رو اضافه میکنه:
commentable_id (unsigned BigInt)
commentable_type (string)
با استفاده از morphs() و نسخههای UUID/ULID اون، کدمون خواناتر، تمیزتر، و مطابق استاندارای لاراول میشه.
@GoldenCodeir
#Laravel
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1943245143517127095?t=G7MLCysG1b-TCpom8s83sA&s=35
برای پیادهسازی این رابطه، معمولاً به دو ستون نیاز داریم:
*_id → آیدیه مدل والد
*_type → نام کامل کلاس مدل والد
بجای ساخت این ستونها بصورت دستی، لاراول یه سری روش ارائه داده که کارو سادهتر و خواناتر میکنه.
🔹 morphs('name')
نوع ID: bigInteger → پیشفرض و متداول
🔹 uuidMorphs('name')
نوع ID: UUID → وقتی مدلها از UUID استفاده میکنن
🔹 ulidMorphs('name')
نوع ID: ULID → مناسب پروژههای مدرن
یه مثال:
Schema::create('comments', function (Blueprint $table) {
$table->id();
$table->text('body');
// این خط بهجای دو ستون: commentable_id و commentable_type
$table->morphs('commentable');
$table->timestamps();
});📌 این خط بصورت خودکار این دو ستون رو اضافه میکنه:
commentable_id (unsigned BigInt)
commentable_type (string)
با استفاده از morphs() و نسخههای UUID/ULID اون، کدمون خواناتر، تمیزتر، و مطابق استاندارای لاراول میشه.
@GoldenCodeir
#Laravel
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1943245143517127095?t=G7MLCysG1b-TCpom8s83sA&s=35
X (formerly Twitter)
Povilas Korop | Laravel Courses Creator & Youtuber (@PovilasKorop) on X
Laravel tip.
Creating polymorphic relationships? Use `morphs()`, `uuidMorphs()`, or `ulidMorphs()` to add both ID and type columns in one call!
Link to the docs: https://t.co/h4yjVnZNPn
#practicalLaravelDocs
Creating polymorphic relationships? Use `morphs()`, `uuidMorphs()`, or `ulidMorphs()` to add both ID and type columns in one call!
Link to the docs: https://t.co/h4yjVnZNPn
#practicalLaravelDocs
❤8👍2
وقتی با تعداد زیادی رکورد در دیتابیس کار میکنی، استفاده از متودهایی مثل get() که همه دادهها رو یکباره دریافت میکنن، باعث مصرف بالای حافظه میشن و ممکنه برنامه رو کند یا حتی دچار کرش کنن.
برای حل این مشکل، لاراول متود chunk() رو ارائه داده. این متود دیتاهامونو به دستههای کوچک (مثلاً ۵۰۰ تایی) تقسیم میکنه، هر دسته رو جداگانه دریافت و پردازش میکنخ. این کار باعث میشه حافظه فقط درگیره بخش کوچکی از دیتاها بشه و مصرف منابع بهینه باقی بمونه.
مثال:
یکی از کاربردهای مهم:
فرض کن میخوای یک فیلد (مثلا status) رو برای میلیونها رکورد آپدیت کنی. اگه از get() استفاده کنی، ممکنه حافظه سرور پر بشه. ولی با chunk() میتونی رکوردها رو دستهبندیشده و مرحلهبهمرحله دریافت و پردازش کنی، که بسیار بهینهتره.
@GoldenCodeir
#Laravel
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1945781820986937615?s=
برای حل این مشکل، لاراول متود chunk() رو ارائه داده. این متود دیتاهامونو به دستههای کوچک (مثلاً ۵۰۰ تایی) تقسیم میکنه، هر دسته رو جداگانه دریافت و پردازش میکنخ. این کار باعث میشه حافظه فقط درگیره بخش کوچکی از دیتاها بشه و مصرف منابع بهینه باقی بمونه.
مثال:
DB::table('orders')->chunk(500, function ($orders) {
foreach ($orders as $order) {
// پردازش هر سفارش
}
});یکی از کاربردهای مهم:
فرض کن میخوای یک فیلد (مثلا status) رو برای میلیونها رکورد آپدیت کنی. اگه از get() استفاده کنی، ممکنه حافظه سرور پر بشه. ولی با chunk() میتونی رکوردها رو دستهبندیشده و مرحلهبهمرحله دریافت و پردازش کنی، که بسیار بهینهتره.
@GoldenCodeir
#Laravel
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1945781820986937615?s=
X (formerly Twitter)
Povilas Korop | Laravel Courses Creator & Youtuber (@PovilasKorop) on X
Laravel tip.
Processing thousands of DB records?
Use `chunk()` to avoid memory issues!
It retrieves records in small batches and processes them one chunk at a time.
Perfect for data migrations and bulk operations.
Link to docs: https://t.co/748DspJbdq…
Processing thousands of DB records?
Use `chunk()` to avoid memory issues!
It retrieves records in small batches and processes them one chunk at a time.
Perfect for data migrations and bulk operations.
Link to docs: https://t.co/748DspJbdq…
❤8🔥2
Forwarded from اسنپــــ کست |یادگیری هوش مصنوعی و برنامهنویسی
🧠 نکته کدنویسی: قبل از اینکه کد بزنی، فکر کن!
🔹 خیلی از باگها، کدهای بیکیفیت و پروژههای شکستخورده، از یه چیز شروع شدن:
کدنویسی بدون فکر کردن!
✅ قبل از نوشتن کد:
• مسئله رو کامل بفهم
• ورودی و خروجی رو مشخص کن
• ساختار کلی راهحل رو روی کاغذ یا ذهنی بچین
• بعد تازه شروع به کدنویسی کن!
«کدنویسی، آخرین مرحلهی حل مسئلهست، نه اولینش.»
📌 تمرین: قبل از حل یه مسئله، ۲ دقیقه فقط فکر کن، بعد دست به کیبورد بزن.
━━━✦✦✦━━━
📢 اسنپــــ کست | لذت یادگیری
📲 @snappcastt
#نکته
🔹 خیلی از باگها، کدهای بیکیفیت و پروژههای شکستخورده، از یه چیز شروع شدن:
کدنویسی بدون فکر کردن!
✅ قبل از نوشتن کد:
• مسئله رو کامل بفهم
• ورودی و خروجی رو مشخص کن
• ساختار کلی راهحل رو روی کاغذ یا ذهنی بچین
• بعد تازه شروع به کدنویسی کن!
«کدنویسی، آخرین مرحلهی حل مسئلهست، نه اولینش.»
📌 تمرین: قبل از حل یه مسئله، ۲ دقیقه فقط فکر کن، بعد دست به کیبورد بزن.
━━━✦✦✦━━━
📢 اسنپــــ کست | لذت یادگیری
📲 @snappcastt
#نکته
🔥7👍2
متود segment() در لاراول به شما این امکان رو میده که بخشهای مختلف مسیر URL رو به راحتی استخراج و بررسی کنید. این متود برای ساخت منطقهای داینامیک بر اساس URL بسیار کاربردیه.
📌 کاربردهای اصلی:
خواندن بخشهای جداگانه مسیر URL
شرط گذاری و تصمیم گیری بر اساس مسیر فعلیمون
فیلتر کردن دیتاها یا تنظیم نمایش محتوا براساس URL
نحوه استفاده
شماره بخشها از 1 شروع میشه.
مثال:
اگه URL برابر باشه با:
نکته :
اگه بخش مورد نظر در URL وجود نداشته باشه، مقدار null برمیگردد.
@GoldenCodeir
#Laravel
(به منبع و مثالش دقت 👇🏾)
https://x.com/MilwadDev/status/1943673513291690462?s=35
📌 کاربردهای اصلی:
خواندن بخشهای جداگانه مسیر URL
شرط گذاری و تصمیم گیری بر اساس مسیر فعلیمون
فیلتر کردن دیتاها یا تنظیم نمایش محتوا براساس URL
نحوه استفاده
$segment1 = $request->segment(1); // بخش اول مسیر
$segment2 = $request->segment(2); // بخش دوم مسیر
شماره بخشها از 1 شروع میشه.
مثال:
اگه URL برابر باشه با:
https://example.com/products/electronics/phones
$request->segment(1) مقدار "products"
$request->segment(2) مقدار "electronics"
$request->segment(3) مقدار "phones"
نکته :
اگه بخش مورد نظر در URL وجود نداشته باشه، مقدار null برمیگردد.
@GoldenCodeir
#Laravel
(به منبع و مثالش دقت 👇🏾)
https://x.com/MilwadDev/status/1943673513291690462?s=35
👍6🆒3❤1🔥1
در Eloquent، فرض کنید میخواین یک رابطهی hasMany رو فقط در صورتی load کنید که هنوز بارگذاری نشده باشه تا از اجرای کوئریهای تکراری جلوگیری بشه. کدوم گزینه بهترین انتخابه؟؟
Anonymous Quiz
23%
$user->with('posts')
16%
$user->load('posts')
22%
$user->loadMissing('posts')
39%
$user->loadIfMissing('posts')
❤5🔥2
متود ensure() در کلاس Collection لاراول این امکانو به شما میده تا نوع همهی آیتمهای داخل کالکشن رو اعتبارسنجی کنید. این متود بررسی میکنه که آیا همه موارد از یک کلاس مشخص یا نوع دادهای مثل int، string یا bool هستن یا نه.
اگه حتی یکی از آیتمها نوع متفاوتی داشته باشه، یک Exception رخ میده و سریعاً متوجه خطا میشید.
چرا استفاده کنیم؟
تضمین سازگاری داده ها
جلوگیری از خطاهای زمان اجرا ناشی از نوع داده ی اشتباه
کد تمیزتر و قابل اطمینان تر
پشتیبانی از انواع اولیه و کلاسها
مثال:
یا:
متود ensure() یک روش ساده و موثر برای اطمینان از صحت نوع دیتاهای داخل کالکشنه که باعث میشه کد شما ایمنتر و قابل نگهداریتر باشه.
@GoldenCodeir
#Laravel
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/MrPunyapal/status/1947691817694335268?s=1
اگه حتی یکی از آیتمها نوع متفاوتی داشته باشه، یک Exception رخ میده و سریعاً متوجه خطا میشید.
چرا استفاده کنیم؟
تضمین سازگاری داده ها
جلوگیری از خطاهای زمان اجرا ناشی از نوع داده ی اشتباه
کد تمیزتر و قابل اطمینان تر
پشتیبانی از انواع اولیه و کلاسها
مثال:
$numbers = collect([10, 20, 30]);
$numbers->ensure('int'); // بدون خطا اجرا میشه
یا:
$products = collect([$product1, 'not a product']);
$products->ensure(Product::class); // یک exception رخ میده
متود ensure() یک روش ساده و موثر برای اطمینان از صحت نوع دیتاهای داخل کالکشنه که باعث میشه کد شما ایمنتر و قابل نگهداریتر باشه.
@GoldenCodeir
#Laravel
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/MrPunyapal/status/1947691817694335268?s=1
X (formerly Twitter)
Punyapal Shah | Laravel Artisan | PHP Developer (@MrPunyapal) on X
Laravel's Collection::ensure() 🔒
Validate the type of every item in your collection — or get an exception 💥
Supports class names and primitive types like 'int', 'string', 'bool', etc.
Super handy for safe mapping 💡
Validate the type of every item in your collection — or get an exception 💥
Supports class names and primitive types like 'int', 'string', 'bool', etc.
Super handy for safe mapping 💡
🔥6❤3👍1
متود insertOrIgnore() در لاراول برای وارد کردن چند رکورد بصورت دسته ای هستش. اگه رکوردی باعث تکرار unique key یا نقض محدودیتهای دیتابیس بشه، بجای ایجاد خطا، اون رکورد هارو نادیده میگیره و بقیه رکورد هارو وارد میکنه.
این متود زمانی خیلی کاربردیه که بخوای دادههای حجیم رو وارد کنی و احتمال بدی بعضی رکوردها قبلاً توی دیتابیس داشتن. درین حالت، برنامه بدون خطا ادامه پیدا میکنه و کل عملیات bulk insert متوقف نمیشه.
📌 مثال:
درین مثال، رکورد سوم دارای ایمیلی هستش که قبلاً در جدول وجود داره (پس تکراریه).
با insertOrIgnore() رکوردهای تکراری رو نادیده میگیره و فقط رکوردهای جدید (user2@example.com) رو وارد میکنه.
@GoldenCodeir
#Laravel
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1950492837373469057?s=1
این متود زمانی خیلی کاربردیه که بخوای دادههای حجیم رو وارد کنی و احتمال بدی بعضی رکوردها قبلاً توی دیتابیس داشتن. درین حالت، برنامه بدون خطا ادامه پیدا میکنه و کل عملیات bulk insert متوقف نمیشه.
📌 مثال:
$data = [
['email' => 'user1@example.com', 'name' => 'User One'],
['email' => 'user2@example.com', 'name' => 'User Two'],
['email' => 'user1@example.com', 'name' => 'User One Duplicate'], // ایمیل تکراری
];
// جدول users ایمیل رو به عنوان UNIQUE تعریف کردیم
DB::table('users')->insertOrIgnore($data);
درین مثال، رکورد سوم دارای ایمیلی هستش که قبلاً در جدول وجود داره (پس تکراریه).
با insertOrIgnore() رکوردهای تکراری رو نادیده میگیره و فقط رکوردهای جدید (user2@example.com) رو وارد میکنه.
@GoldenCodeir
#Laravel
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1950492837373469057?s=1
❤7👏2
Forwarded from Python Hints
#تجربه
بیش از ۹۸٪ پروژههای اپلیکیشنهایی که کار کردم دیتابیس رو اشتباه انتخاب کرده بودند!
اصلا طبیعیت دیتاها و کار با دیتابیس و ... اشون
اما ۱۰۰٪ تأکید دارند که از
مشکل کجاس ؟
- عدم شناخت کافی از دیتابیسهای دیگه:
این بیشترین موردی هست که دیدم.
- عدم توانایی طراحی درست سیستم؛ معماری سیستم خیلی مهم هست.
- عدم بررسی و آنالیز نیازمندیهای سیستم؛ اینکه درگیر دنبال بهترینها بودن نشید چیز خوبیه ولی اینکه سر چیزای ابتدایی هم تحقیق نمیکنید و میندازید گردن اینکه من نمیخوام کمالگرا باشم یک موضوع متفاوت هست.
- ترس، ترس از تست کردن چیزای جدید.
طرف میگه من ۱۰ ساله دارم
احمقانه تصمیم نگیر
راجب mongodb بخونید، خیلی از شما چیزی که بهش نیاز دارید
رو هم داره؛ تا ۱۰۰ لول ارتباط تو در تو هم نگه میداره (که عمرا و عملاً بهش نمیرسید)
به راحتی میتونید
دیزاین collection (مثل table بهش فکر کنید) میتونی ثانیهای عوض بشه اگر بخواید.
فرض کنید توی sql بتونید، هروقت خواستید بدون دردسر و
به کمک پکیج
Janus
هم گزینه خوبی هست برای اونهایی که به دیتابیس
۶ سال قبل بعنوان جایگزین رایگان Neo4j ازش استفاده کردم روی حجم داده بسیار بسیار بالا و خیلی رضایت بخش بود.
خلاصه که زرتی نرید با
بیش از ۹۸٪ پروژههای اپلیکیشنهایی که کار کردم دیتابیس رو اشتباه انتخاب کرده بودند!
اصلا طبیعیت دیتاها و کار با دیتابیس و ... اشون
SQL نیستاما ۱۰۰٪ تأکید دارند که از
SQL استفاده بشه و اکثراً بعد از مدتی کوئریهای پیچیده کل سیستمشون رو میگیره !مشکل کجاس ؟
- عدم شناخت کافی از دیتابیسهای دیگه:
Mongo, Janus, Casandra, Scylla, ....این بیشترین موردی هست که دیدم.
- عدم توانایی طراحی درست سیستم؛ معماری سیستم خیلی مهم هست.
- عدم بررسی و آنالیز نیازمندیهای سیستم؛ اینکه درگیر دنبال بهترینها بودن نشید چیز خوبیه ولی اینکه سر چیزای ابتدایی هم تحقیق نمیکنید و میندازید گردن اینکه من نمیخوام کمالگرا باشم یک موضوع متفاوت هست.
- ترس، ترس از تست کردن چیزای جدید.
طرف میگه من ۱۰ ساله دارم
SQL کار میکنم (خب به درک!!)، نهایت همرو خودم Query مینویسم! به فکر نفرات بعدی روی پروژه هم باش احمقانه تصمیم نگیر
راجب mongodb بخونید، خیلی از شما چیزی که بهش نیاز دارید
mongodb هست Transactionرو هم داره؛ تا ۱۰۰ لول ارتباط تو در تو هم نگه میداره (که عمرا و عملاً بهش نمیرسید)
به راحتی میتونید
replication و read-only داشته باشید دیزاین collection (مثل table بهش فکر کنید) میتونی ثانیهای عوض بشه اگر بخواید.
فرض کنید توی sql بتونید، هروقت خواستید بدون دردسر و
migration, ... ستون اضافه کنید.به کمک پکیج
motor خیلی راحت؛ async رو هم در اختیار خواهید داشتJanus
هم گزینه خوبی هست برای اونهایی که به دیتابیس
Graph نیاز دارند.۶ سال قبل بعنوان جایگزین رایگان Neo4j ازش استفاده کردم روی حجم داده بسیار بسیار بالا و خیلی رضایت بخش بود.
خلاصه که زرتی نرید با
SQL شروع کنید.👍10🤔5😁2
وقتی شما از Request دیتایی دریافت میکنی، معمولاً مقدار ورودی به صورت رشته string هستش.
اما گاهی لازم داری که مقدار ورودی رو به نوع خاصی مثل integer ، boolean، array, ،date یا enum تبدیل کنی.
قبلاً باید خودت دستی این تبدیل هارو انجام میدادی، مثلاً با استفاده از (int) یا boolval() یا کدهای مشابه. ولی توی نسخه جدید لاراول ، متودهایی مثل integer(), boolean(), array(), date(), و enum() بهت اجازه میدن که به سادگی و مستقیم ورودی رو به نوع مورد نظرت تبدیل کنی.
📌 یه مثال:
بدون نیاز به تبدیل دستی، کد تمیزتر و خواناتری داری.
#Laravel
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1952304768493277191?s=35
اما گاهی لازم داری که مقدار ورودی رو به نوع خاصی مثل integer ، boolean، array, ،date یا enum تبدیل کنی.
قبلاً باید خودت دستی این تبدیل هارو انجام میدادی، مثلاً با استفاده از (int) یا boolval() یا کدهای مشابه. ولی توی نسخه جدید لاراول ، متودهایی مثل integer(), boolean(), array(), date(), و enum() بهت اجازه میدن که به سادگی و مستقیم ورودی رو به نوع مورد نظرت تبدیل کنی.
📌 یه مثال:
$age = $request->integer('age');
// مقدار 'age' رو به عدد صحیح تبدیل میکنه
$isActive = $request->boolean('active');
// مقدار 'active' رو به true یا false تبدیل میکنه
$tags = $request->array('tags');
// مقدار 'tags' رو به آرایه تبدیل میکنهبدون نیاز به تبدیل دستی، کد تمیزتر و خواناتری داری.
#Laravel
@GoldenCodeir
(بهمنبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1952304768493277191?s=35
X (formerly Twitter)
Povilas Korop | Laravel Courses Creator & Youtuber (@PovilasKorop) on X
Laravel tip.
Need to retrieve input as specific types instead of always getting strings?
Use `integer()`, `boolean()`, `array()`, `date()`, and `enum()` methods.
No more manual casting.
Link to the docs: https://t.co/KcjMO7ei00
#practicalLaravelDocs
Need to retrieve input as specific types instead of always getting strings?
Use `integer()`, `boolean()`, `array()`, `date()`, and `enum()` methods.
No more manual casting.
Link to the docs: https://t.co/KcjMO7ei00
#practicalLaravelDocs
❤9👍4🔥2
نکته مهم برای کوئریهای MySQL
اگه روی یک ستون دیتابیس ایندکس تعریف شده، استفاده از توابعی مثل YEAR(), MONTH() یا هر تابع دیگه ای روی همون ستون در شرطهای WHERE باعث میشه MySQL نتونه از ایندکس استفاده کنه.
📌 چرا؟
چون وقتی تابعی روی ستون اعمال میشه، مقدار ستون تغییر میکنه و ایندکس روی مقدار اصلی ستونه، نه مقدار تبدیلشده توسط تابع.
در نتیجه MySQL مجبور میشه کل جدول رو اسکن کنه (Full Table Scan) که عملکرد کوئری رو به شدت کاهش میده.
مثال
فرض کنین روی ستون تاریخ paid_at ایندکس دارید و میخواید رکوردهای مربوط به سال 2023 رو بگیرید.
روش اشتباه:
درین حالت، MySQL برای هر ردیف ابتدا تابع YEAR() رو اجرا میکنه و سپس مقایسه میکنه، که باعث غیرفعال شدن ایندکس میشه.
روش بهینه:
درین حالت شرط مستقیماً روی ستون paid_at اعمال میشه و MySQL میتونه از ایندکس استفاده کنه، بنابرین کوئری بسیار سریعتر اجرا میشود.
#SQL
#MySql
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1952704402038333586?s=35
اگه روی یک ستون دیتابیس ایندکس تعریف شده، استفاده از توابعی مثل YEAR(), MONTH() یا هر تابع دیگه ای روی همون ستون در شرطهای WHERE باعث میشه MySQL نتونه از ایندکس استفاده کنه.
📌 چرا؟
چون وقتی تابعی روی ستون اعمال میشه، مقدار ستون تغییر میکنه و ایندکس روی مقدار اصلی ستونه، نه مقدار تبدیلشده توسط تابع.
در نتیجه MySQL مجبور میشه کل جدول رو اسکن کنه (Full Table Scan) که عملکرد کوئری رو به شدت کاهش میده.
مثال
فرض کنین روی ستون تاریخ paid_at ایندکس دارید و میخواید رکوردهای مربوط به سال 2023 رو بگیرید.
روش اشتباه:
WHERE YEAR(paid_at) = 2023
درین حالت، MySQL برای هر ردیف ابتدا تابع YEAR() رو اجرا میکنه و سپس مقایسه میکنه، که باعث غیرفعال شدن ایندکس میشه.
روش بهینه:
WHERE paid_at >= '2023-01-01' AND paid_at < '2024-01-01'
درین حالت شرط مستقیماً روی ستون paid_at اعمال میشه و MySQL میتونه از ایندکس استفاده کنه، بنابرین کوئری بسیار سریعتر اجرا میشود.
#SQL
#MySql
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/mmartin_joo/status/1952704402038333586?s=35
X (formerly Twitter)
Martin Joo (@mmartin_joo) on X
💡 If you have a database index, it's important to note that MySQL cannot use it with functions.
The most common situation is date columns and date functions such as 'year' or 'month'.
So instead of using 'year(paid_at)', use 'where between':
The most common situation is date columns and date functions such as 'year' or 'month'.
So instead of using 'year(paid_at)', use 'where between':
❤12🔥5👍2
نمایش فایل در مرورگر بجای دانلود( لاراول):
گاهی در پروژهها لازم داری یک فایل (مثل PDF یا تصویر) مستقیما در مرورگر باز بشه و دانلود نشه!
لاراول برای این کار متود ساده و تمیز response()->file() رو داره.
📌 مثال:
با این کار، مرورگر سعی میکنه PDF رو inline نمایش بده.
حالا تفاوتش با download() چیه؟
file() → نمایش فایل در مرورگر (inline)
download() → دانلود اجباری فایل
📌 نکات مهم:
1. مرورگر فقط فایلهای پشتیبانیشده (مثل PDF، JPG، PNG، TXT) رو نمایش میده.
2. بعضی تنظیمات مرورگر یا افزونهها ممکنه باعث دانلود اجباری بشن.
3. مسیر فایل باید معتبر باشه (storage_path() یا public_path()).
4. میتونی MIME-Type رو خودت مشخص کنی:
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1955203877453590922?s=35
گاهی در پروژهها لازم داری یک فایل (مثل PDF یا تصویر) مستقیما در مرورگر باز بشه و دانلود نشه!
لاراول برای این کار متود ساده و تمیز response()->file() رو داره.
📌 مثال:
Route::get('/manual', function () {
$path = storage_path('app/public/manual.pdf');
return response()->file($path);
});با این کار، مرورگر سعی میکنه PDF رو inline نمایش بده.
حالا تفاوتش با download() چیه؟
file() → نمایش فایل در مرورگر (inline)
download() → دانلود اجباری فایل
📌 نکات مهم:
1. مرورگر فقط فایلهای پشتیبانیشده (مثل PDF، JPG، PNG، TXT) رو نمایش میده.
2. بعضی تنظیمات مرورگر یا افزونهها ممکنه باعث دانلود اجباری بشن.
3. مسیر فایل باید معتبر باشه (storage_path() یا public_path()).
4. میتونی MIME-Type رو خودت مشخص کنی:
return response()->file($path, [
'Content-Type' => 'application/pdf'
]);
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1955203877453590922?s=35
X (formerly Twitter)
Povilas Korop | Laravel Courses Creator & Youtuber (@PovilasKorop) on X
Laravel tip.
Use `response()->file()` to display files in browser instead of downloading them!
Perfect for showing PDFs or documents inline.
Link to the docs: https://t.co/pUVtuMzrv6
#practicalLaravelDocs
Note: browser support varies by browser and…
Use `response()->file()` to display files in browser instead of downloading them!
Perfect for showing PDFs or documents inline.
Link to the docs: https://t.co/pUVtuMzrv6
#practicalLaravelDocs
Note: browser support varies by browser and…
❤6👍6🔥1
وقتی در لاراول دادهها رو با Model::all() میگیریم، نتیجه همیشه یک Collection هست.
اما میتونیم برای هر مدل، یک کالکشن اختصاصی تعریف کنیم.
🔹 فایدش چیه؟
متودهای مخصوص لیست دادهها رو فقط یکبار تعریف میکنی.
منطق کار با لیستها (مثل فیلترها) از مدل جدا میشه.
کدت خواناتر و دامینمحورتر میشه.
نمونه عملی:
چطور استفاده کنیم؟
حالا هر وقت Post::all() رو صدا بزنی، علاوه بر متودهای پیش فرض کالکشن، متد اختصاصی published() هم در دسترسه.
📌 نتیجه: دیگه نیاز نیست یک منطق رو بارها تکرار کنی یا دستی فیلتر بزنی.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید👇🏾)
https://x.com/mmartin_joo/status/1955241116992741659?s=19
اما میتونیم برای هر مدل، یک کالکشن اختصاصی تعریف کنیم.
🔹 فایدش چیه؟
متودهای مخصوص لیست دادهها رو فقط یکبار تعریف میکنی.
منطق کار با لیستها (مثل فیلترها) از مدل جدا میشه.
کدت خواناتر و دامینمحورتر میشه.
نمونه عملی:
// کالکشن اختصاصی
class PostCollection extends Collection {
public function published() {
return $this->filter(fn($post) => $post->is_published);
}
}
// اتصال به مدل
class Post extends Model {
public function newCollection(array $models = []) {
return new PostCollection($models);
}
}
چطور استفاده کنیم؟
$posts = Post::all()->published();
حالا هر وقت Post::all() رو صدا بزنی، علاوه بر متودهای پیش فرض کالکشن، متد اختصاصی published() هم در دسترسه.
📌 نتیجه: دیگه نیاز نیست یک منطق رو بارها تکرار کنی یا دستی فیلتر بزنی.
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید👇🏾)
https://x.com/mmartin_joo/status/1955241116992741659?s=19
X (formerly Twitter)
Martin Joo (@mmartin_joo) on X
🔥Did you know you can write custom Collections in Laravel?
You can define a collection for any of your models.
It's a great way to organize your code, and it also brings it closer to your domain.
🧵Keep reading
You can define a collection for any of your models.
It's a great way to organize your code, and it also brings it closer to your domain.
🧵Keep reading
👍9🔥4🥰1
یکی از چالشای رایج در اپلیکیشنهای تحت وب اینه که اجرای مکرر کوئریهای دیتابیس باعث کندی برنامه و افزایش فشار روی سرور میشه.
لاراول برای حل این مشکل یک سیستم Cache قدرتمند ارائه داده. با کش میتونیم دادههای پرمصرف رو در حافظه ذخیره کنیم و دفعات بعد بدون مراجعه به دیتابیس، سریع به کاربر برگردونیم.
نتیجه؟
سرعت بالاتر
کاهش بار روی دیتابیس
تجربهی بهتر برای کاربر
📌 روشهای اصلی کار با Cache در لاراول
1. ذخیرهی موقت دیتا (remember)
وقتی دیتا ای رو میخوایم برای مدت مشخصی نگه داریم:
دادهی posts برای ۶۰ ثانیه در کش میمونه.
اگر وجود داشته باشه، دیگه کوئری اجرا نمیشه.
اگه وجود نداشته باشه، کوئری اجرا میشه و نتیجه ذخیره میشه.
2. ذخیرهی دائمی دیتا (forever)
برای دادههایی که بهندرت تغییر میکنن:
این داده هیچ وقت منقضی نمیشه.
فقط وقتی با forget پاکش کنیم از کش حذف میشه.
3. ذخیره و دریافت مستقیم (put, get)
کنترل کامل روی ذخیرهسازی و گرفتن داده دارید.
4. حذف دادههای کش شده
🔹 و forget برای حذف دادهی مشخص استفاده میشه.
🔹و flush همه کشها رو یکجا خالی میکنه (مثلاً در زمان توسعه).
5. کار با چندین استور کش
لاراول از استورهای مختلف مثل Redis, Memcached, Database یا File پشتیبانی میکنه:
این قابلیت انعطاف بالایی میده و میتونید بر اساس نیاز پروژه، استور مناسب انتخاب کنین.
6. گروهبندی کش با تگها (Tags)
وقتی بخواین چندین کش مرتبط رو مدیریت کنین:
🔹 با tags میتونین گروهی از کشها رو حذف کنین بدون اینکه بقیه دیتاها پاک بشن.
7. استفاده از rememberForever
برای دادههایی که تقریبا ثابت هستن:
🔹 مثل forever کار میکنه ولی ترکیب با callback داره.
🔹 مناسب برای دیتاهایی که همیشه به یک شکل نیاز داریم.
📌 چه دیتا هایی رو بهتره کش کنیم؟
لیست مقالات یا محصولات پر بازدید
دستهبندیها و منوهای سایت
تنظیمات عمومی سایت
نتایج کوئریهای سنگین و پرتکرار
خلاصه:
از کش برای دادههای پر مصرف و کم تغییر استفاده کنید.
با remember داده رو موقت ذخیره کنین.
با forever یا rememberForever دادههای ثابت رو نگه دارین.
با forget و flush دادهها رو بروز یا پاکسازی کنین.
در پروژههای بزرگ، از استورهای حرفهای مثل Redis برای مدیریت کش استفاده کنین.
با مدیریت درست کش، اپلیکیشن لاراولی شما نهتنها سریعتر میشه، بلکه دیتابیس هم نفس راحتی میکشه!
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/laravelbackpack/status/1957404629148611054?s=1
لاراول برای حل این مشکل یک سیستم Cache قدرتمند ارائه داده. با کش میتونیم دادههای پرمصرف رو در حافظه ذخیره کنیم و دفعات بعد بدون مراجعه به دیتابیس، سریع به کاربر برگردونیم.
نتیجه؟
سرعت بالاتر
کاهش بار روی دیتابیس
تجربهی بهتر برای کاربر
📌 روشهای اصلی کار با Cache در لاراول
1. ذخیرهی موقت دیتا (remember)
وقتی دیتا ای رو میخوایم برای مدت مشخصی نگه داریم:
$posts = Cache::remember('posts', 60, function () {
return Post::all();
});دادهی posts برای ۶۰ ثانیه در کش میمونه.
اگر وجود داشته باشه، دیگه کوئری اجرا نمیشه.
اگه وجود نداشته باشه، کوئری اجرا میشه و نتیجه ذخیره میشه.
2. ذخیرهی دائمی دیتا (forever)
برای دادههایی که بهندرت تغییر میکنن:
Cache::forever('settings', $settings);این داده هیچ وقت منقضی نمیشه.
فقط وقتی با forget پاکش کنیم از کش حذف میشه.
3. ذخیره و دریافت مستقیم (put, get)
Cache::put('key', 'value', 300); // ذخیره به مدت 300 ثانیه
$value = Cache::get('key'); // دریافت دادهکنترل کامل روی ذخیرهسازی و گرفتن داده دارید.
4. حذف دادههای کش شده
Cache::forget('posts'); // حذف یک کلید خاص
Cache::flush(); // حذف همه دادههای کش🔹 و forget برای حذف دادهی مشخص استفاده میشه.
🔹و flush همه کشها رو یکجا خالی میکنه (مثلاً در زمان توسعه).
5. کار با چندین استور کش
لاراول از استورهای مختلف مثل Redis, Memcached, Database یا File پشتیبانی میکنه:
Cache::store('redis')->put('bar', 'baz', 10);این قابلیت انعطاف بالایی میده و میتونید بر اساس نیاز پروژه، استور مناسب انتخاب کنین.
6. گروهبندی کش با تگها (Tags)
وقتی بخواین چندین کش مرتبط رو مدیریت کنین:
Cache::tags(['people', 'authors'])->put('Anne', $anne, 120);
Cache::tags('authors')->flush();🔹 با tags میتونین گروهی از کشها رو حذف کنین بدون اینکه بقیه دیتاها پاک بشن.
7. استفاده از rememberForever
برای دادههایی که تقریبا ثابت هستن:
$setting = Cache::rememberForever('website_denoscription', function () {
return App\Models\Setting::firstWhere('name', 'website_denoscription');
});🔹 مثل forever کار میکنه ولی ترکیب با callback داره.
🔹 مناسب برای دیتاهایی که همیشه به یک شکل نیاز داریم.
📌 چه دیتا هایی رو بهتره کش کنیم؟
لیست مقالات یا محصولات پر بازدید
دستهبندیها و منوهای سایت
تنظیمات عمومی سایت
نتایج کوئریهای سنگین و پرتکرار
خلاصه:
از کش برای دادههای پر مصرف و کم تغییر استفاده کنید.
با remember داده رو موقت ذخیره کنین.
با forever یا rememberForever دادههای ثابت رو نگه دارین.
با forget و flush دادهها رو بروز یا پاکسازی کنین.
در پروژههای بزرگ، از استورهای حرفهای مثل Redis برای مدیریت کش استفاده کنین.
با مدیریت درست کش، اپلیکیشن لاراولی شما نهتنها سریعتر میشه، بلکه دیتابیس هم نفس راحتی میکشه!
#Laravel
@GoldenCodeir
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/laravelbackpack/status/1957404629148611054?s=1
X (formerly Twitter)
Backpack for Laravel (@laravelbackpack) on X
#Laravel Tip
Don't let database queries slow you down. Use Laravel's cache facade to cache data temporarily, reducing database queries.
Don't let database queries slow you down. Use Laravel's cache facade to cache data temporarily, reducing database queries.
❤8🔥4
ایا user->loadMissing('posts')$ چه زمانی Query میزنه؟
Anonymous Quiz
7%
همیشه
20%
وقتی relation خالی باشه
66%
اگه relation قبلاً لود نشده باشه
7%
هیچ وقت
👍5❤2🔥1
Forwarded from Code Lab (𝘮𝘰𝘯𝘪𝘣 𝘴𝘢𝘭𝘦𝘩𝘪)
🔥 تفاوت جاوااسکریپت و تایپاسکریپت
جاوااسکریپت یه زبان Dynamic هست یعنی تایپ دادهها رو موقع اجرا مشخص میکنه و این باعث میشه گاهی با خطاهای عجیب روبرو بشی
تایپاسکریپت اومده تا این مشکل رو حل کنه و به جاوااسکریپت قدرت Static Typing بده یعنی از همون اول تایپ متغیرها رو مشخص کنی و قبل از اجرا خطاها رو ببینی
در واقع تایپاسکریپت مثل یه لایه امن روی جاوااسکریپت عمل میکنه و کدتو تمیزتر و قابل پیشبینیتر میکنه
یه نکته مهم بدون تایپاسکریپت تبدیل به جاوااسکریپت میشه پس برای اجرا همیشه به JS برمیگرده
#TypeScript #JavaScript
CODELAB | GpCodeLab
جاوااسکریپت یه زبان Dynamic هست یعنی تایپ دادهها رو موقع اجرا مشخص میکنه و این باعث میشه گاهی با خطاهای عجیب روبرو بشی
تایپاسکریپت اومده تا این مشکل رو حل کنه و به جاوااسکریپت قدرت Static Typing بده یعنی از همون اول تایپ متغیرها رو مشخص کنی و قبل از اجرا خطاها رو ببینی
در واقع تایپاسکریپت مثل یه لایه امن روی جاوااسکریپت عمل میکنه و کدتو تمیزتر و قابل پیشبینیتر میکنه
یه نکته مهم بدون تایپاسکریپت تبدیل به جاوااسکریپت میشه پس برای اجرا همیشه به JS برمیگرده
#TypeScript #JavaScript
CODELAB | GpCodeLab
👍5🔥1