کانال آموزشی لاراول
3.06K subscribers
120 photos
4 videos
38 links
📌 کانال اتاق برنامه نویسی
@PapiDon_coding
Download Telegram
🔍 دستور firstWhere

اگر تا به حال با دستور where در Eloquent کار کرده‌اید، firstWhere را هم حتما دوست خواهید داشت. این دستور، روش سریع و ساده‌ای برای جستجو و دریافت اولین مدل است که با یک زوج مقدار-کلید مطابقت می‌کند.

📌 چگونه استفاده کنیم؟

$user = User::firstWhere('name', 'John Doe');

در مثال بالا، به راحتی و با یک خط کد، اولین کاربر با نام "John Doe" را جستجو و دریافت کردیم.


🔗 اگر به دنبال استفاده از عملگرها هستید، همچنان ساده است:

$user = User::firstWhere('age', '>=', 18);


🔺 نکته مهم: اگرچه firstWhere بسیار مفید و سریع است، ولی برای پیچیدگی‌های بیشتر، همچنان پیشنهاد می‌شود از دستور where استفاده کنید.


#PapiDon
👍3👌3🙏1
کانال آموزشی لاراول
🔍 دستور firstWhere اگر تا به حال با دستور where در Eloquent کار کرده‌اید، firstWhere را هم حتما دوست خواهید داشت. این دستور، روش سریع و ساده‌ای برای جستجو و دریافت اولین مدل است که با یک زوج مقدار-کلید مطابقت می‌کند. 📌 چگونه استفاده کنیم؟ $user = User:…
🔺 نکته مهم:

دستور firstWhere به شما امکان می‌دهد که به سرعت و با استفاده از کد کمتر اولین موردی که با شرط مورد نظر شما مطابقت دارد را پیدا کنید. اما این دستور تنها برای شرایط ساده و محدود طراحی شده است.

در مقابل، where یک دستور بسیار قوی‌تر است که اجازه می‌دهد تا با استفاده از شرایط متعدد و پیچیده‌تر، جستجوهایی دقیق‌تر انجام دهید. بعضی از دلایل استفاده از where به جای firstWhere در موارد پیچیده‌تر عبارت‌اند از:

1️⃣. شرایط متعدد : با where شما می‌توانید تعداد نامحدودی شرط را اضافه کنید و از ترکیب‌های مختلفی مانند orWhere, whereIn, و غیره استفاده کنید.

2️⃣. عملیات‌های پیچیده‌تر : where امکان استفاده از توابع پایگاه داده و عملیات‌های متنوع‌تری را فراهم می‌آورد.

3️⃣. ترکیب با دستورات دیگر : اگر بخواهید شرایطی را با groupBy, having, orderBy و سایر دستورات ترکیب کنید، استفاده از where مناسب‌تر است.

4️⃣. گرفتن نتایج متعدد : firstWhere تنها یک نتیجه را بر می‌گرداند، در حالی که با استفاده از where و ترکیب آن با get یا `paginate`، شما می‌توانید یک مجموعه از نتایج را بازیابی کنید.

به همین دلیل، اگر شما به دنبال انجام یک جستجوی ساده و سریع هستید، firstWhere می‌تواند گزینه خوبی باشد.
👍42
🔒محافظت از متغیرهای env در Laravel

وقتی در حال توسعه یک برنامه با Laravel هستید و APP_DEBUG برابر با true قرار دارد، خطاها واقعا مفید هستند. اما چطور می‌توانیم از نمایش متغیرهای حساس env در این خطاها جلوگیری کنیم؟

📌 گام‌های عملیاتی:

1️⃣. فایل app/Exceptions/Handler.php را باز کنید.

2️⃣. در متد register، خط زیر را اضافه کنید:


$this->withoutExpose(['DB_PASSWORD', 'DB_USERNAME', 'ANOTHER_SENSITIVE_KEY']);


📝 نکته: در اینجا، DB_PASSWORD, DB_USERNAME, و ANOTHER_SENSITIVE_KEY نمونه‌هایی از متغیرهایی هستند که ممکن است بخواهید مخفی کنید. شما می‌توانید هر متغیر env دیگری که مایل به محافظت از آن هستید را نیز به لیست اضافه کنید.

🚫 همیشه توصیه می‌شود که در محیط تولید، APP_DEBUG را بر روی false قرار دهید تا از نمایش هر گونه اطلاعات حساس به کاربران جلوگیری شود.


#PapiDon
7👍3👌1
🔍 آشنایی با whereHas در لاراول

در لاراول، هنگام کار با ارتباط‌های مدل‌ها ممکن است نیاز پیدا کنید تا کوئری‌هایی اجرا کنید که بر اساس وجود یا عدم وجود رکوردهای مرتبط در یک ارتباط تصمیم بگیرد. whereHas در اینجا به کمک می‌آید.

📌 چگونه کار می‌کند؟
فرض کنید دو مدل داریم: User و Post. هر کاربر می‌تواند چندین پست داشته باشد. حالا فرض کنید می‌خواهید تمام کاربرانی را پیدا کنید که حداقل یک پست دارند. در اینجا whereHas می‌تواند مفید باشد:

$usersWithPosts = User::whereHas('posts')->get();


🔗 پیشرفته‌تر:
شما همچنین می‌توانید شرط‌هایی به whereHas اضافه کنید تا بر اساس ویژگی‌هایی از مدل‌های مرتبط فیلتر کنید:

$usersWithPopularPosts = User::whereHas('posts', function($query) {
$query->where('views', '>', 1000);
})->get();


📚 در این مثال، فقط کاربرانی که پست‌هایی با بیش از 1000 بازدید دارند، بازگردانده می‌شوند.


#PapiDon
👍83
🔍 آشنایی با flatMap در لاراول

در لاراول، وقتی با مجموعه‌ها (collections) کار می‌کنید، بعضی وقت‌ها نیاز دارید تا تغییراتی را روی آن‌ها اعمال کنید و در نهایت یک مجموعه جدید و یکپارچه بسازید. flatMap همان کمک‌رسان شما در این زمینه است.

📌 چگونه کار می‌کند؟

فرض کنید شما یک مجموعه از کاربران دارید و هر کاربر چندین شماره تلفن. با استفاده از flatMap ، شما می‌توانید یک مجموعه یکپارچه از شماره‌های تلفن بسازید:

$users = collect([
['name' => 'Ali', 'phones' => ['09120000000', '09121111111']],
['name' => 'Reza', 'phones' => ['09122222222']]
]);

$phones = $users->flatMap(function ($user) {
return $user['phones'];
});

// نتیجه: ['09120000000', '09121111111', '09122222222']


🔗 تفاوت با map:
تفاوت اصلی flatMap با map این است که flatMap مجموعه‌های میانی را حذف می‌کند و یک مجموعه یکپارچه و یکسان ایجاد می‌کند.


#PapiDon
🔥10👍3👏21
🔍 شناسایی افزونه‌های مشکل‌ساز در VSCode

سلام دوستان 👋
اگر از کاربران Visual Studio Code هستید، قطعا تا به حال با این موضوع مواجه شده‌اید که بعد از نصب یک افزونه یا به‌روزرسانی، برخی مواقع سرعت کار با ویرایشگر شما تحت تأثیر قرار می‌گیرد. اما چطور می‌توانیم بفهمیم کدام افزونه مشکل دارد؟

با دستور Start Extension Bisect میتوانیم به سادگی مشکل‌ساز را شناسایی کنیم.

🔹 چطور این کار را انجام دهیم؟

1️⃣. باز کردن VSCode.
2️⃣. فشردن Ctrl + Shift + P (ویندوز یا Linux) یا Cmd + Shift + P (مک).
3️⃣. تایپ Start Extension Bisect و انتخاب آن.
4️⃣. دنبال کردن دستورالعمل‌ها و مشاهده نتیجه!

خیلی هم ساده، در کمتر از چند دقیقه می‌توانید مشکل‌ساز را پیدا و غیرفعال کنید. 😊


#PapiDon
👍4👏1
کانال آموزشی لاراول
🔍 شناسایی افزونه‌های مشکل‌ساز در VSCode سلام دوستان 👋 اگر از کاربران Visual Studio Code هستید، قطعا تا به حال با این موضوع مواجه شده‌اید که بعد از نصب یک افزونه یا به‌روزرسانی، برخی مواقع سرعت کار با ویرایشگر شما تحت تأثیر قرار می‌گیرد. اما چطور می‌توانیم…
🛠 دستور Start Extension Bisect در Visual Studio Code یک ویژگی است که به شما کمک می‌کند تا مشکلات و مشکل‌سازهای مرتبط با افزونه‌ها را پیدا کنید. اگر شما احساس می‌کنید که پس از نصب یک افزونه یا به‌روزرسانی یکی از افزونه‌ها، VSCode به شکل نامناسبی عمل می‌کند، با استفاده از این ویژگی می‌توانید مشکل‌ساز را شناسایی کنید.

وقتی دستور Start Extension Bisect را اجرا می‌کنید، VSCode به شکل تکراری نصف کردن (bisect) افزونه‌ها را غیرفعال می‌کند تا بفهمد کدام افزونه باعث مشکل می‌شود. این روش بر مبنای الگوریتم باینری سرچ (binary search) است.

روند کار به این شکل است:

1️⃣. نصف افزونه‌ها را غیرفعال می‌کند.
2️⃣. از شما می‌پرسد که آیا مشکل همچنان وجود دارد یا خیر.
3️⃣. بر اساس پاسخ شما، VSCode تصمیم می‌گیرد که کدام نصف از افزونه‌ها را بررسی کند.
4️⃣. این فرآیند ادامه پیدا می‌کند تا مشکل‌ساز پیدا شود.

پس از پیدا کردن افزونه‌ای که مشکل را ایجاد می‌کند، شما می‌توانید آن را حذف یا غیرفعال کنید.
🙏4👍1💯1
🚀 ویژگی setVisible در لاراول

در مدل‌های Eloquent لاراول، گاهی می‌خواهیم تصمیم بگیریم که هنگام تبدیل مدل به JSON یا آرایه، کدام ویژگی‌ها یا ستون‌ها نمایش داده شوند. برای این کار، از setVisible استفاده می‌کنیم.

🔍 مثال:
$user = App\Models\User::first();
$user->setVisible(['first_name', 'last_name']);

با استفاده از کد بالا، فقط first_name و last_name کاربر در خروجی نمایش داده می‌شود.

🔐 توجه: این ویژگی تنها برای کنترل نمایش اطلاعات استفاده می‌شود و نباید به عنوان یک راه‌کار امنیتی محض در نظر گرفته شود.

#PapiDon
5👍2🎉1
کانال آموزشی لاراول
🚀 ویژگی setVisible در لاراول در مدل‌های Eloquent لاراول، گاهی می‌خواهیم تصمیم بگیریم که هنگام تبدیل مدل به JSON یا آرایه، کدام ویژگی‌ها یا ستون‌ها نمایش داده شوند. برای این کار، از setVisible استفاده می‌کنیم. 🔍 مثال: $user = App\Models\User::first(); $user…
🔒 ویژگی setHidden در لاراول

در مدل‌های Eloquent لاراول، مواقعی وجود دارد که می‌خواهیم بعضی از ویژگی‌ها یا ستون‌ها را هنگام تبدیل مدل به JSON یا آرایه، مخفی کنیم. برای این منظور، از setHidden استفاده می‌کنیم.


🔎 مثال:
$user = App\Models\User::first();
$user->setHidden(['password', 'remember_token']);


در این مثال، ویژگی‌های password و remember_token کاربر در خروجی نمایش داده نخواهد شد.

📌 یادآوری: استفاده از setHidden فقط برای مدیریت ویژگی‌هایی که در خروجی نمایش داده نمی‌شوند مناسب است و نباید به عنوان یک ابزار امنیتی به حساب آید.

#PapiDon
👍61
🔥Singleton Resource in Laravel 🔥

آیا تاکنون با مواردی روبرو شده‌اید که فقط نیاز به یک نمونه منحصر به فرد از یک منبع داشته‌اید؟ مثلا فقط یک پروفایل کاربری و نیازی به ایجاد یا ذخیره‌سازی پروفایل‌های جدید ندارید!

لاراول با ارائه Route::singleton به شما این امکان را می‌دهد که مسیرهای مخصوص به یک منبع تک‌نمونه را تعریف کنید:

Route::singleton('profile', ProfileController::class);

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

پیشنهاد می‌کنم حتما این ویژگی مفید را در پروژه‌های خود امتحان کنید! 🚀

#PapiDon
👍10🔥1👏1
🖋 مفهوم Declarative و Imperative در برنامه‌نویسی 🖋

⚙️ برنامه‌نویسی فرمانی (Imperative):

- در این نوع برنامه‌نویسی، ما به سیستم دستور می‌دهیم که چطور یک کار را انجام دهد.
- هر گام از فرآیند به تفصیل مشخص شده است.

📌 مثال:
let total = 0;
for(let i=0; i<array.length; i++) {
total += array[i];
}

💻 برنامه‌نویسی اعلامی (Declarative):

- در اینجا، ما فقط مشخص می‌کنیم چه چیزی را می‌خواهیم و سیستم خودش تصمیم می‌گیرد چگونه آن را انجام دهد.
- تاکید بر نتیجه نهایی است، نه روی روند اجرایی.

📌 مثال:

const total = array.reduce((acc, val) => acc + val, 0);

🔍 ریکت و لاراول جز کدام هستند؟

- ریکت (React): این کتابخانه جاوااسکریپت اعلامی است. شما فقط توصیف می‌کنید چگونه UI در وضعیت معینی باید باشد و ریکت مسئول به‌روز رسانی است.

- لاراول (Laravel): چارچوب برنامه‌نویسی PHP که در بسیاری از جنبه‌هایش اعلامی است، ولی همچنان می‌تواند در برخی قسمت‌ها فرمانی باشد.


#PapiDon
8👍2👏2
🚀 hasManyThrough

📌 سه مدل داریم: Country`، `User و Post. هر کاربر (User) در یک کشور (Country) زندگی می‌کند و هر کاربر می‌تواند چندین پست (Post) داشته باشد.

🧐 می‌خواهیم همه پست‌هایی که توسط کاربران یک کشور خاص منتشر شده است را پیدا کنید. اگر مستقیما بخواهیم این کار را انجام دهیم، باید ابتدا تمام کاربران آن کشور را پیدا کرده و سپس همه پست‌های آنها را جمع‌آوری کنیم.

🎉 راه‌حل با hasManyThrough: با استفاده از این رابط، می‌توانیم به طور مستقیم به پست‌های مرتبط با کشور دسترسی پیدا کنیم، بدون نیاز به پیمایش کاربران.

class Country extends Model
{
public function posts()
{
return $this->hasManyThrough(
Post::class,
User::class,
'country_id', // foreign key on User table
'user_id', // foreign key on Post table
'id', // local key on Country table
'id' // local key on User table
);
}
}


🚀 به راحتی می‌توانیم تمام پست‌های منتشر شده در یک کشور را پیدا کنیم

$posts = $country->posts;
👍133
🌟 Your biggest risk isn't failing, it's getting too comfortable 🌟

📌 ممکن است فکر کنیم بزرگترین خطر وقتی است که شکست می‌خوریم. ولی در واقع، خطر واقعی زمانی رخ می‌دهد که در راحتی غرق می‌شویم. راحتی می‌تواند مانع رشد و پیشرفت ما شود. پس هرگز از تلاش و چالش‌های جدید کوتاه نیایید، زیرا همین چالش‌ها مسیر یادگیری و رشد شماست.

به جلو بروید، چون راحتی موقتی است، اما یادگیری و رشد، برای همیشه.


#PapiDon
9👍2🔥1👏1
🚀 map() with Collection

استفاده از متد ()map در کالکشن‌ها

دوستان عزیز، وقتی با کالکشن‌ها کار می‌کنید، بارها نیاز پیدا می‌کنید که بر روی هر آیتم از کالکشن تغییراتی اعمال کنید. در اینجا متد ()map به کمکتان می‌آید.

🔹 مثال:

$numbers = collect([1, 2, 3, 4, 5]);
$squaredNumbers = $numbers->map(function ($number) {
return $number * $number;
});
// نتیجه: [1, 4, 9, 16, 25]


🔸 می‌توانید حتی برای مدل‌ها هم از این متد استفاده کنید:

$users = User::all();
$fullNames = $users->map(function ($user) {
return $user->first_name . ' ' . $user->last_name;
});


📍 نکات مهم:
1️⃣ متد ()map کالکشن اصلی را تغییر نمی‌دهد.
2️⃣ اگر می‌خواهید هم آیتم و هم کلید آن را استفاده کنید:

$items = collect(['a' => 1, 'b' => 2, 'c' => 3]);
$mapped = $items->map(function ($value, $key) {
return $key . '-' . ($value * 2);
});
// نتیجه: ['a-2', 'b-4', 'c-6']


#PapiDon
14👍1
Livewire v3 Has Been Released

لایووایر نسخه v3 منتشر شده است.

https://livewire.laravel.com/docs/quickstart

📌 استفاده از آلپاین
لایووایر v3 آلپاین را برای انجام کارهای سنگین بهره‌برداری می‌کند. با ثبت افزونه‌های آلپاین، لایووایر اکنون اجازه می‌دهد تا آلپاین انجام کارهای سنگین را انجام دهد.

این همچنین به این معناست که آلپاین اکنون به صورت پیش‌فرض با لایووایر گنجانده شده است، بنابراین نیازی به بارگذاری آلپاین از طریق CDN یا NPM نیست. به طور خودکار جاسازی شده است.

علاوه بر این، v3 از افزونه Morph آلپاین برای مقایسه DOM و اعمال به‌روزرسانی‌ها به جای morphdom استفاده می‌کند. این موجب کاهش مشکلات مقایسه DOM و همگامی بهتر بین لایووایر و آلپاین خواهد شد.
👍9🔥1
🔹whereColumn in Laravel

این دستور اجازه می‌دهد تا دو یا چند ستون را در یک یا چند جدول با یکدیگر مقایسه کنید.

$records = YourModel::whereColumn('created_at', 'updated_at')->get();

📜 تمام رکوردهایی که created_at و updated_at آن‌ها یکسان است را برمیگرداند.

🔸 استفاده از شرط‌های مقایسه‌ای:

$records = YourModel::whereColumn('created_at', '<', 'updated_at')->get();

📜 رکوردهایی را برگردانده که created_at آن‌ها قبل از updated_at است.

🔸 مقایسه ستون‌ها در دو جدول مختلف:

فرض کنید دو مدل User و Order داریم:


$users = User::join('orders', 'users.id', '=', 'orders.user_id')
->whereColumn('users.account_balance', '>', 'orders.total_price')
->get();


📜 در اینجا، کاربرانی که موجودی حساب آن‌ها بیشتر از قیمت کل سفارش‌هایشان است، را پیدا می‌کنیم.


🔸 استفاده از چندین شرط در whereColumn :

$users = User::whereColumn([
['first_name', '=', 'last_name'],
['created_at', '<', 'updated_at']
])->get();


📜 این کد، کاربرانی را می‌یابد که نام و نام خانوادگی یکسان دارند و تاریخ ایجاد قبل از تاریخ بروزرسانی است.
👍141
🚀 به زودی پلتفرم ما با آموزش‌های جامع‌تر و گام به گام، همراه با مثال‌های بیشتر و جزئی تر، آماده خواهد شد. تا از هر آنچه که می‌خواهید بیشتر و بهتر بدانید، لذت ببرید. 😊🫶

🔔 اطلاع‌رسانی مربوط به پلتفرم تنها در همین کانال انجام خواهد شد. 🌟🔥

#PapiDon
❤‍🔥16👍51
🔍 مهارت‌های اساسی غیرفنی (Soft Skills) برای برنامه‌نویسان 🔍

همگان می‌دانند که برنامه‌نویسان نیاز به مهارت‌های فنی خاص خودشان دارند. اما آیا می‌دانید که مهارت‌های غیرفنی نیز در موفقیت آن‌ها نقش پررنگی دارد؟

🔹 1. ارتباط موثر: با مشتریان، تیم و مدیران.
🔹 2. حل مسئله: شناسایی و رفع چالش‌ها.
🔹 3. یادگیری مداوم: با تغییرات فناوری هم‌گام باشید.
🔹 4. کار گروهی: همکاری با افراد با تخصص‌های متفاوت.
🔹 5. مدیریت زمان: اولویت‌بندی و انجام وظایف در زمان مقرر.
🔹 6. پذیرش نقد: استفاده از فیدبک برای بهبود.
🔹 7. مدیریت استرس: مقابله با فشارهای کاری.
🔹 8. رویکرد مشتری‌مدار: فهم و پاسخ به نیازهای مشتری.
🔹 9. تصمیم‌گیری: در مواقع حساس و ناخواسته.
🔹 10. مسئولیت‌پذیری: پذیرش خطاها و یادگیری از آن‌ها.

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


#PapiDon
@PapiDon_state
❤‍🔥43👍2
🔍 آشنایی با سیستم LAMP

آیا تا به حال با این سوال روبرو شده‌اید که LAMP چیست؟

🌐 What is LAMP ?

مخففی است از مجموعه‌ای از نرم‌افزارهای متن‌باز که به صورت ترکیبی برای احداث و بهره‌برداری از وب‌سایت‌ها و وب‌اپلیکیشن‌ها استفاده می‌شوند.


🔢 مولفه‌های LAMP:

1. L: Linux – سیستم‌عامل مبتنی بر لینوکس
2. A: Apache – وب‌سرور محبوب و متن‌باز
3. M: MySQL – پایگاه داده
4. P: PHP – زبان برنامه‌نویسی (گاهی به Perl یا Python هم می‌پردازند).


@PapiDon_state
👍5❤‍🔥3
🔍 Str::mask()

امروز با شما یک تابع جالب در لاراول به نام ()Str::mask را مرور می‌کنیم.

🎯 ماسک کردن بخشی از رشته با یک کاراکتر خاص (مانند *).

🔧 نحوه استفاده:
فرض کنید می‌خواهید چند کاراکتر از یک رشته را مخفی کنید، مثلاً ارقام وسط یک شماره کارت:

$card = Str::mask('1234567890123456', 5, 12); 

// Result : 1234********3456

در این مثال، کاراکترهای پنجم تا دوازدهم رشته با * جایگزین شده‌اند.
و اگر پارامتر دوم را ندهیم از کاراکتر پنجم به بعد رشته * جایگزین خواهد شد.


@PapiDon_state
👍203
Manage your energy, not your time. If you do that, time works itself out.

📌انرژی خود را مدیریت کن، نه زمانت را. اگر این کار را انجام دهی، زمان خود به خود درست می‌شود

معمولا ما به فکر این هستیم که چگونه زمان خود را به صورت بهینه‌تری استفاده کنیم، اما اگر انرژی‌امان را به درستی مدیریت نکنیم، حتی اگر زمان زیادی داشته باشیم، بهره‌برداری مناسبی از آن نخواهیم داشت.

🔋 مدیریت انرژی به مواردی مانند استراحت، تغذیه مناسب، ورزش، روانشناسی و حتی محیط کار مرتبط است. وقتی انرژی‌امان را به خوبی مدیریت می‌کنیم، بهره‌وری بیشتری خواهیم داشت و زمان خود را به صورت اثربخش‌تری استفاده می‌کنیم. از این رو، به جای اینکه تنها روی زمان متمرکز شویم، باید روی انرژی‌امان هم تمرکز داشته باشیم.

@PapiDon_state
👍72💯1