Golden Code – Telegram
Golden Code
738 subscribers
53 photos
248 links
نکات laravel, php و...
Download Telegram
"چطوری تو لاراول از پس پردازشهای سنگین بر بیایم؟

وقتی حجم ترنزاکشنها بالا میره (مثلاً ۱ میلیون رکورد!)، خیلیها تصور میکنن Laravel جواب نمیده! ولی واقعیت اینه که اگر از ابزارها و تکنیکهای درست استفاده کنی، Laravel خیلی هم قدرتمنده

استفاده از Queue Jobs
ارسال عملیاتهای سنگین به صف برای پردازش در پسزمینه

بهینهسازی دیتابیس: تعریف Index مناسب

استفاده از Query Builder به جای Eloquent برای کوئریهای سنگین یا حتی اگه می تونین کوئری خام بنویسین معجزه رو می بینید

استفاده از Transaction
برای تضمین atomic بودن عملیاتهای حساس جاهایی که چند کار مرتبط با هم رو می خواین انجام بدین عالیه

استفاده از chunk
بارگذاری و پردازش دادههای بزرگ بهصورت تکهای

۵. استفاده از Redis یا Kafka

برای صفهای سریع و سبک Redis
برای پروژه های بزرگ و real-time کافکا باور کنید معجزه می کنه

بهینه سازی کد PHP و مصرف حافظه

استفاده از cursor() بهجای بارگذاری کل دیتا

جلوگیری از لوپهای سنگین و غیرضروری

نتیجه؟
اگه این موارد رو به درستی پیاده کنید، Laravel بهراحتی از پس میلیونها ترنزاکشن برمیاد بدون اینکه اپلیکیشنت کرش کنه! "

#Laravel

@GoldenCodeir
(به منبع توجه کنید👇🏾)

https://www.linkedin.com/posts/fererydoon-salemi_laravel-php-backenddevelopment-activity-7327385475915128832-DtQB?utm_source=share&utm_medium=member_android&rcm=ACoAACtoqKYB5Pk8cjIxolPHpdjShKtRL0tcolQ
👍72🔥1👏1
این Elasticsearch چیه و چرا محبوبه؟

یه موتور جستجو open source، real-time و بسیار سریعه که برای جستجو در دیتاهای حجیم و پیچیده طراحی شده.

برخلاف دیتابیس‌های سنتی مثل MySQL، Elasticsearch برای جستجوی متنی (Full-Text Search) بهینه شده و از الگوریتم‌های بسیار پیشرفته‌ای مثل تحلیل ریشه‌ی کلمات (stemming)، تطبیق تقریبی (fuzzy)، و جستجوی وزنی (scoring) استفاده میکنه.

📌 چرا Elasticsearch ؟

لاراول با Eloquent و Query Builder در کار با دیتابیس بسیار خوب عمل میکنه، ولی وقتی نیاز به جستجوی پیچیده، سریع و حرفه‌ای دارین، مثلا:

•جستجو در مقالات، محصولات یا کاربران با قابلیت auto-complete

•رتبه‌بندی نتایج جستجو

•فیلترهای ترکیبی و تحلیلی (مثل قیمت، دسته‌بندی، برند و…)


اونجاست که Elasticsearch وارد میشه.✅️

پس اگه دنبال جستجوی حرفه‌ای و مقیاس‌پذیر هستین، Elasticsearch میتونه مکمل قدرتمندی برای دیتابیستون باشه!

#Elasticsearch

@GoldenCodeir
6🔥3
در لاراول وقتی از متود collect() استفاده می‌کنیم، آرایه معمولی رو به یک آبجکت از کلاس Collection تبدیل میکنیم.
در واقع Collection ها ابزاری هستن که امکانات زیادی برای پردازش دیتا به ما میدن و کار با دیتارو ساده‌تر، خواناتر و تمیزتر میکنند.

مثال:
$array = [1, 2, 3, 4, 5];
$collection = collect($array);

// حالا می‌تونیم از متدهای مختلفی مثل filter، map، reduce و غیره استفاده کنیم:
$even = $collection->filter(function ($value) {
    return $value % 2 === 0;  // فقط اعداد زوج رو برمی‌گردونه
});

dd($even->all()); // خروجی: [2, 4]

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

مزایای استفاده از Collections :

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

میتونین چندین عملیات رو به راحتی پشت سر هم انجام بدین.

متودهای مفیدی مثل map، filter، pluck، groupBy، reduce و ده‌ها مورد دیگه برای اعمال تغییر بر دیتا وجود دارن که خیلی کار رو راحت میکنند.

#Laravel
@GoldenCodeir

(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/laravelbackpack/status/1923702549015822611?s=
👍62
این PSR چیه و چرا باید برات مهم باشه؟

اگه PHP کار میکنی و میخوای کدت حرفه‌ای باشه باید با PSR (PHP Standard Recommendation) آشنا بشی.
این استانداردها توسط گروه PHP-FIG تعریف شدن تا کدنویسی بین فریم‌ورک‌ها و توسعه‌دهنده‌ها هماهنگ باشه.


چرا PSR مهمه؟

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


📌 مهمترین PSRها که نیازه بشناسی:

* PSR-1:
اصول پایه مثل نام‌گذاری کلاس‌ها و فایل‌ها

* PSR-2 / PSR-12:
سبک نوشتن تمیز کد (Formatting)

* PSR-3:
استاندارد لاگ‌گیری در PHP

* PSR-4:
یعنی Autoloading کلاس‌ها با استفاده از namespace

* PSR-6 / PSR-16:
کش کردن داده‌ها به‌صورت استاندارد

* PSR-7:
مدیریت Request/Response برای اپلیکیشن‌های وب

* PSR-11:
استاندارد Container برای Dependency Injection

* PSR-14:
سیستم Event Dispatcher (رویدادها و listenerها)

مثال PSR-4:
namespace App\Controllers;

class UserController {
public function index() {
echo "User index page";
}
}

composer.json:

"autoload": {
"psr-4": {
"App\\": "src/"
}
}

خلاصه که اگه میخوای برنامه‌نویس PHP حرفه‌ای باشی، یادگیری PSR اجباره و نه یک انتخاب.❤️‍🔥

@GoldenCodeir
👍7🔥51
معرفی Laravel Pulse – ابزار مانیتورینگ ساده و حرفه‌ای برای پروژه‌های لاراول

این Laravel Pulse یک ابزار سبک، real-time و کاملاً یکپارچه با فریمورک Laravel هستش که به برنامه نویسا این کمک می‌کند تا عملکرد، سلامت و مشکلات داخلیه اپ رو به‌صورت real time مانیتور کنند.

برخلاف ابزارهای سنگینتر مثل Telescope یا سرویس هایی مثل Sentry یا New Relic، هدف Pulse ارائه ی یک تجربه ساده و سریع برای مانیتورینگ در محیط‌های production و development است.

📌ویژگی‌هاش چیه؟

مانیتورینگ real-time برای request ها، ارورها، query های کند و queue

داشبورد سبک مینیمال و قابل فهم

نصب سریع و راه‌اندازی آسون با چند کامند

قابلیت توسعه‌پذیری با Custom Event ها

مناسب برای محیط‌های production بدون تاثیر محسوس بر performance


📌 موارد قابل مشاهده در داشبوردش چیه؟؟

تعداد request ها و وضعیت اونا

کوئری‌های کند و زمان اجراشون

ارورهای گزارش شده در زمان اجرا

صف‌های در حال اجرا

عملکرد کش و تعامل با دیتابیس


📌نصب و راه‌اندازیش چجوریه؟؟
composer require laravel/pulse
php artisan pulse:install
php artisan migrate
php artisan pulse:serve

بعده نصب، داشبورد Pulse از طریق مسیر /pulse در دسترستونه.

خلاصه که اگه دنبال مانیتورینگ مؤثر و بدون پیچیدگی هستین، Pulse یک انتخاب عالیه.
#Laravel

@GoldenCodeir
6🔥2🏆1
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
👍6🔥21
🎯 استفاده از متغیر $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 — دسترسی به حلقه‌ی والد در صورت وجود

مثال؟؟
<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
👍93🔥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
👍41👎1
🧠 جی آی تی JIT یعنی چی؟

در اصل JIT مخفف Just-In-Time compilation هست، یعنی کامپایل هم‌زمان با اجرا. این تکنیک باعث می‌شه که کدهایی که به صورت معمول تفسیر (interpret) می‌شن (مثل PHP یا JavaScript)، در زمان اجرا به کد ماشین تبدیل بشن، و این یعنی اجراشون خیلی سریع‌تر بشه.


مزایای JIT

- سرعت اجرای بهتر
- کاهش مصرف منابع در برخی سناریوها
- عملکرد نزدیک‌تر به زبان‌های کامپایل‌شده (مثل C)


🧪 کار JIT در PHP چیه؟

در PHP 8 به بعد، Zend Engine دارای یک JIT Compiler شد. قبل از اون، PHP فقط تفسیر می‌کرد.

کار JIT باعث می‌شه:
بخش‌هایی از کد که زیاد استفاده می‌شن (مثلاً حلقه‌ها یا توابع پرتکرار)، به کد ماشین واقعی تبدیل بشن.

⚙️ این باعث افزایش سرعت اجرای برنامه‌ها می‌شه، مخصوصاً در کارهای محاسباتی سنگین مثل:

- پردازش تصویر
- بازی‌سازی
- پروژه‌های علمی
- کدهایی که زیاد اجرا می‌شن مثل فریم‌ورک‌ها یا CMSها

#PHP #JIT #Milwad #Tutorial

📱 @MilwadKhosravi
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() استفاده کنید تا مصرف حافظه کنترل بشه و سرور دچار مشکل نشه.


User::lazy()->each(function($user) {
// پردازش کاربرا
});

#Laravel

@GoldenCodeir

(به منبع و مثالش دقت کنید👇🏾)
https://x.com/laravelbackpack/status/1940734778506121448?s=35
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 → مناسب پروژه‌های مدرن


یه مثال:
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
8👍2
وقتی با تعداد زیادی رکورد در دیتابیس کار میکنی، استفاده از متودهایی مثل get() که همه داده‌ها رو یک‌باره دریافت میکنن، باعث مصرف بالای حافظه میشن و ممکنه برنامه رو کند یا حتی دچار کرش کنن.

برای حل این مشکل، لاراول متود chunk() رو ارائه داده. این متود دیتاهامونو به دسته‌های کوچک (مثلاً ۵۰۰ تایی) تقسیم میکنه، هر دسته رو جداگانه دریافت و پردازش میکنخ. این کار باعث میشه حافظه فقط درگیره بخش کوچکی از دیتاها بشه و مصرف منابع بهینه باقی بمونه.

مثال:
DB::table('orders')->chunk(500, function ($orders) {
foreach ($orders as $order) {
// پردازش هر سفارش
}
});

یکی از کاربردهای مهم:

فرض کن می‌خوای یک فیلد (مثلا status) رو برای میلیون‌ها رکورد آپدیت کنی. اگه از get() استفاده کنی، ممکنه حافظه سرور پر بشه. ولی با chunk() میتونی رکوردها رو دسته‌بندی‌شده و مرحله‌به‌مرحله دریافت و پردازش کنی، که بسیار بهینه‌تره.

@GoldenCodeir

#Laravel
(به منبع و مثالش دقت کنید 👇🏾)
https://x.com/PovilasKorop/status/1945781820986937615?s=
8🔥2
🧠 نکته کدنویسی: قبل از اینکه کد بزنی، فکر کن!

🔹 خیلی از باگ‌ها، کدهای بی‌کیفیت و پروژه‌های شکست‌خورده، از یه چیز شروع شدن:
کدنویسی بدون فکر کردن!

قبل از نوشتن کد:
• مسئله رو کامل بفهم
• ورودی و خروجی رو مشخص کن
• ساختار کلی راه‌حل رو روی کاغذ یا ذهنی بچین
• بعد تازه شروع به کدنویسی کن!

«کدنویسی، آخرین مرحله‌ی حل مسئله‌ست، نه اولینش.»

📌 تمرین: قبل از حل یه مسئله، ۲ دقیقه فقط فکر کن، بعد دست به کیبورد بزن.

━━━✦✦✦━━━
📢 اسنپــــ کست | لذت یادگیری
📲 @snappcastt
#نکته
🔥7👍2
متود segment() در لاراول به شما این امکان رو میده که بخش‌های مختلف مسیر URL رو به راحتی استخراج و بررسی کنید. این متود برای ساخت منطق‌های داینامیک بر اساس URL بسیار کاربردیه.

📌 کاربردهای اصلی:

خواندن بخش‌های جداگانه مسیر 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🆒31🔥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 رخ میده و سریعاً متوجه خطا میشید.

چرا استفاده کنیم؟

تضمین سازگاری داده ها

جلوگیری از خطاهای زمان اجرا ناشی از نوع داده ی اشتباه

کد تمیزتر و قابل اطمینان تر

پشتیبانی از انواع اولیه و کلاس‌ها

مثال:
$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
🔥63👍1
متود insertOrIgnore() در لاراول برای وارد کردن چند رکورد بصورت دسته‌ ای هستش. اگه رکوردی باعث تکرار unique key یا نقض محدودیتهای دیتابیس بشه، بجای ایجاد خطا، اون رکورد هارو نادیده میگیره و بقیه رکورد هارو‌ وارد میکنه.


این متود زمانی خیلی کاربردیه که بخوای داده‌های حجیم رو وارد کنی و احتمال بدی بعضی رکوردها قبلاً توی دیتابیس داشتن. درین حالت، برنامه بدون خطا ادامه پیدا میکنه و کل عملیات 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
#تجربه

بیش از ۹۸٪ پروژه‌های اپلیکیشن‌هایی که کار کردم دیتابیس رو اشتباه انتخاب کرده بودند!

اصلا طبیعیت دیتاها و کار با دیتابیس و ... اشون 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() بهت اجازه میدن که به سادگی و مستقیم ورودی رو به نوع مورد نظرت تبدیل کنی.

📌 یه مثال:
$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
9👍4🔥2
نکته مهم برای کوئری‌های MySQL

اگه روی یک ستون دیتابیس ایندکس تعریف شده، استفاده از توابعی مثل 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
12🔥5👍2