• دوره‌ی آموزش سریع لاراول

    دوره‌ی آموزش سریع لاراول

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

    نصب لاراول با داکر روی مک

    توی ویدئوی اول در مورد نصب و شروع کار حرف زدم. تک تک سیستم عامل ها رو نمیتونستم برو و بگم ولی میتونید با داکر پروژه رو خیلی سریع بالا بیارید. هدف از این دوره اینه که خیلی سریع بدون اینکه ویدیو رو بزنید جلو کار رو یاد بگیرید. من برای نصب لاراول روی مک از این کامند استفاده کردم:

    curl -s "https://laravel.build/laravel-mentor" | bash

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

    برای مک هم جدا از داکر میتونید از لاراول هرد استفاده کنید که توسط کامینیوتی خود لاراول توسعه داده میشه. کاربرهای لینوکس هم که خودشون بلدن چیکار کنن و معمولا همون داکر بهترین گزینه هست واسشون. اینجا میتونید بصورت ویدیویی توضیحاتم رو ببینید:

    نصب لاراول روی مک و سایر سیستم عامل ها

    تعریف مسیرها در لاراول

    در بخش دوم در مورد مسیر ها حرف زدم و اینکه چطور میشه مسیرهای به سبک مدرن تعریف کرد. این روزا دیگه خبری از مسیرهای شلوغ و طولانی نیست و توسعه دهنده ها سعی میکنن مسیرها با معنی و تمیز باشن. حتی طراح های محصول روی هم روی این قضیه حساس تر شدن و واسشون مهمه که آدرسی که فردا برای مارکتینگ میخوان بفرستن تمیز و معرف محتوای صفحه باشه. مثلا ما وقتی این آدرس رو میبینیم به راحتی میتونیم حدس بزنیم اون تو چه خبر میتونه باشه.

    https://github.com/pricing

    توی ویدیو میتونید نحوه ی تعریف مسیرهای ساده در لاراول رو ببینید:

    نحوه ی تعریف مسیر ها در لاراول

    دستوران خط فرمان (CLI tools) در لاراول

    توی لاراول یه فایل داریم به اسم artisan که باهاش میشه دستورات کامند لاینی اجرا کرد. در واقع یه ابزار خط فرمانی هست که میشه فیچر های مختلف لاراول رو باهاش تولید کرد یا یسری چیزها رو دید. مثلا دستور زیر به ما لیست مسیر های توی پروژمون رو میده:

    sail artisan route:list

    آرتیزان کلی بهتون امکانات میده که باهاشون میتونید کارای مختلف بکنید ولی بازم ممکنه یه کامندی نیاز داشته باشید که توی لاراول وجود نداره. اون موقع خودتون میتونید دست به کار بشید و کامند خودتون رو بسازید. توی این ویدیو این اینترفیس رو معرفی کردم و در موردش بیشتر توضیح دادم.

    کار با دستور artisan در لاراول

    سورس رو روی گیتهاب ببینید

    داشتم به این فکر میکردم که یه روشی داشته باشیم که من کدهای هر جلسه رو چطوری بهتون بدم؟ گیت و گیتهاب گزینه ی خوبیه ولی مشکل این بود که اگه هر روز کد رو آپدیت میکردم شما دقیقا کد مریوط به جلسه ی خاص رو نداشتید. از طرف دیگه توی این روزا کسی حوصله ی دانلود و اکسترکت کردن فایل zip رو نداره. بخاطر همین شاید بهترین کار اینه که کد مربوط به هر جلسه رو با یه تگ مشخص روی گیت بذاریم. اینجوری میتونید همون بالا کد رو چک کنید با کامندی که میخواید دانلود کنید. توی این جلسه در مورد این حرف زدم.

    چطور در لاراول ویو تعریف کنیم؟

    سوالی هست که توی ویدیوی بعدی در موردش حرف زدم. ویوها یکی از بخش ها مهم فریمورک لاراول هستن که یه فریمورک MVC هست. یه چیزی مثل وردپرس رو اگه باهاش کار کرده باشید، تمی که روش نصب میکنید یجورایی توی لاراول بهش میگن ویو. در واقع توی ویوها خروجی های html رو رندر میکنیم.

    تعریف ویو در لاراول

    جلوگیری از تکرار در blade و با لاراول

    فرض کنید که میخواید کلی صفحه ی blade داشته باشید که هر کدوم کلی چیز میز تکراری دارن. توی دنیای پی اچ پی پیور مخصوصا اگه تازه کار هستید خیلی چالش دارید که بخش های تکراری رو حذف کنید و فقط یجا داشته باشید. لاراول با فیچرهایی مثل yield و extends این مدل مشکلات رو خیلی شیک و تر و تمیز حل کرده. توی این ویدیو در مورد این داستانا حرف زدم

  • تدریس خصوصی زبان گولنگ – golang

    تدریس خصوصی زبان گولنگ – golang

    اگه فرصت کافی ندارید که برید صفر تا صد ویدیوهای آموزشی یا داکیومنت های زبان گولنگ رو بخونید یک استاد خصوصی بهترین راه برای شماست که با آموزش خصوصی زبان go شما رو زودتر به هدفتون برسونه. کلا ماها فکر میکنیم که هر چیزی رو باید خودمون صفر تا صدش رو یاد بگیریم و همین ممکنه باعث این بشه که دیرتر به هدف برسیم یا بیشتر اوقات نرسیم. من جزو اون دسته از افرادی بودم که دیرتر به بخشی از هدف رسیدم… به شما توصیه میکنم قضیه ی منتورشیپی رو جدی بگیرید. یکی رو پیدا کنید که حتی اگه صفر تا صد کار رو هم ازش نخواستید بصورت منتور کنارتون باشه و نذاره خیلی راه رو اشتباه برید. اما بریم سراغ گو 🙂

    گولنگ زبونیه که این روزا خیلی اسمش رو میشنویم. این زبون در سال ۲۰۰۷ در گوگل با اهداف قشنگی ساخته شد. همه میدونیم C خیلی سریعه ولی سخت. جاواسکریپت خیلی راحته ولی کند! گولنگ هر دوی اینا رو سعی میکنه یجا داشته باشه. سینتکس راحت ولی قدرتمند و سریع. در مجموع گو ویژگی های زیر رو روشون تمرکز کرده.

    انواع داده‌ی ایستا (Static Types)

    اگه با زبونایی مثل جاواسکریپت یا PHP کار کرده باشید، دیدید که توی این زبونا ما وقتی متغیر تعریف میکنیم نیازی نیست که بگیم نوع این متغیر رشته هست یا عددی هست یا هر چیز دیگه. برنامه نویس های تازه کار اینو به دید یه مزیت و قدرت زبان میبینن. ولی در اصل یه مدل ضعف میتونه باشه. توی جامعه ی جاوااسکریپت بخشی از مشکلات ناشی از این ضعف با TypeScript حل شده و توی PHP هم میشه یسری چیزا رو Type-hint کرد توی ورژن های جدید ولی اینا اصل قضیه رو حل نمیکنن! این که زبون در ران تایم نیاز داره که نوع متغیر شما رو تشخیص بده و این به زبان بچه‌های الگوریتمی هزینه (cost) داره. در اصل در این زبانها تایپ هر متغیر با مقداری که داخلش ریخته میشه مشخص میشه و امنیت برنامه و تایپ ها توی ران تایم چک میشه. ولی در زبونایی مثل سی یا گو کد شما در کامپایل تایم یسری چیزا از جمله همین تایپ ها چک میشن و توی ران تایم نیازی نیست که این چک ها انجام بشه.

    معلم خصوصی گو پیدا کنید تا کامروا شوید!

    کلا گو و زبونای کامپایلری سریعترم هستن معمولا چون در فاز کامپایل کدها به زبون سطح پایین تر که نزدیک به ماشین هست ترجمه میشه و هر بار که کد ران میشه نیازی به تفسیر کد وجود نداره. همین باعث پرفورمنس خیلی بالای این نوع برنامه ها میشه. در مقابل یچیزی مثل PHP هر بار کد رو تفسیر و اجرا میکنه که همین باعث کندیش میشه. البته راهکارهایی برای بهبود نسبی این مشکلات ایجاد شده. مثلا در لاراول Octane رو داریم که یجورایی برنامه شما رو در مموری نگه میداره و در درخواست های بعدی نیازی نیاز به پردازش کمتری هست ولی تا جایی که من میدونم در کنار مشکلاتی که ممکنه بخاطر چیزایی مثل مموری لیک بوجود بیاد، بازم هنوز فاصله هست با بهترین ها.

    کدهای خواناتر در Go نسب به رقیب های قدرتمند

    قبول میکنیم که یچی مثل C خیلی خوبه ولی اینم قبول کنید شما که خیلی زبون سختیه 🙂 البته برنامه نویسای اونها هم میگن که درسته بیس زبون سخته ولی برای راحتی لایببری هایی وجود داره که کارشون رو راحتتر میکنه که ما قبول نمیکنیم ازشون :دی

    در مجموع گولنگ سعی کرده سادگی یچیزی مثل پایتون رو حفظ کنه و از اونور مثل سی قوی هم باشه.

    پردازش موازی، کانکارنسی و goroutine ها

    اینجا دیگه یچی مثل PHP خیلی کم میاره 🙁 فرض کنید که یسری ویدیو دارید که میخواید پردازش خاصی روشون انجام بدید و بعد نتیجه رو به کاربر برگردونید. البته کارای در این حد سنگین رو باید به صف ها بسپریم ولی برای میک سنس کردن قضیه یکم تسک رو سنگین تعریف کردم. در این حالت توی پی اچ پی باید ویدیو ها رو پشت سر هم بررسی کنیم ولی توی گو میشه چند تا ترد تعریف کنیم که بصورت موازی این کار رو بکنن. توی پی اچ پی باز یسری راهکارا مثل swoole تعریف شده که من در عمل کار نکردم باهاش ولی خیلی سر و صدا نکرده. ولی حتما به زودی در موردش همینجا تجربم رو میگم.

    معایب زبان برنامه نویسی گو

    • گو زبون شی گرا نیست و نمیتونیم از مزایای زبون های شی گرا استفاده کنیم توش.
    • با اینکه نسبت به سی و… راحتتر شده ولی باز همچنان نسبت به پی اچ پی سخت تره یسری چیزا توش.

    به دنیای گو خوش اومدید:

    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("hello world")
    }

    منابع یادگیری زبان گو

    زبان گو در ابتدا خیلی ساده به نظر میرسه ولی برای اینکه بتونید مفاهیمش رو خوب درک کنید نیاز به منابع درست و حسابی دارید. توی این بخش منابعی که خودم دیدم و دوست داشتم رو معرفی میکنم بهتون. شما هم اگه مورد دیگه ای میشناسید که خوبه توی کامنت ها اضافه کنید.

    در نظر داشته باشید که یه منبع همه چیز رو بهتون یاد نمیده. با اینا شروع کنید و یکیش رو تموم کنید بعد کم کم با سرک کشیدن به چیزای دیگه دانشتون رو عمیق تر کنید.

    پکیج های کاربردی گولنگ

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

    جمع بندی

    من مدتی هست که با زبان گو کار میکنم و برای برنامه نویسی وب از فریمورک gin استفاده میکنم. در صورتی که نیاز به مدرس خصوصی برای زبان گو هستید یا یه منتور برنامه نویسی گو نیاز دارید با من در تماس باشید.

  • بازگشت به جای قبلی – شوتکات vscode

    بازگشت به جای قبلی – شوتکات vscode

    میخوام یه شورتکات توی وی اس کد بهتون بگم که احتمالا خیلی قراره دعام کنید. خیلی وقتا پیش میاد که مثلا میخواید چک کنید که نیم اسپیس رو اضافه کردید به فایل یا نه و میخواید بپرید به بالای صفحه و چک کنید و باز برگردید به همینجا. برای این کار از این شورتکاتها میتونید استفاده کنید و لذتش رو ببرید 🙂 در واقع پریدن به اول صفحه رو که احتمالا همه میدونیم. من که دکمه ی home ندارم با command + up میرم اول صفحه ولی چیزی که مهمه اینه که اینجوری میتونید برگردید به وسط کدی که بودید:

    توی ویندوز:

    Alt + ← ... navigate back
    Alt + → ... navigate forward
    

    توی مک:

    Ctrl + - ... navigate back
    
    Ctrl + Shift + - ... navigate forward

    توی لینوکس:

    Ctrl + Alt + - .., navigate back
    
    Ctrl + Shift + - ... navigate forward

    سخته حفظ کردن توی همه ی سیستم عامل ها ولی یاد بگیرید خیلی خوش میگذره. نکته ی جالبش اینه که حتی اگه از فایل دیگه اومدید این شورتکات ها برمیگردونه‌تون به فایل قبلی!!! خیلی خوبه دیگه قبول کنید 🙂

    منبع: https://stackoverflow.com/questions/35424367/how-can-i-navigate-back-to-the-last-cursor-position-in-visual-studio-code

  • برنامه نویس ربات تریدر ارزهای دیجیتال و فارکس

    برنامه نویس ربات تریدر ارزهای دیجیتال و فارکس

    این روزا ارزهای دیجیتال خودتون میدونید دیگه 🙂 یسری ها هستن که دارن توی زمینه ی ارزهای دیجیتال کار میکنن و روز و شب پای سیستم هستن که یه نونی بیارن سر سفره. منتها این کارم سختی های خودشو داره. یکی از سختی هایی که داره اینه که این بنده خدا ها صب تا شب باید توی نمودار بالا پایین بشن که ببینن آیا نمودار قط کرد یا نکرد! مورد بعدی ای که هست اینه که باشه اصلا صب تا شبم طرف بشینه پای سیستم باز میرسه به یجایی که قط میکنه ولی دلش نمیاد بفروشه تا اصطلاحا تخم نمیکنه بخره! بعدن میبینه که ضرل کرده و دیگه اون موقع دیره. این دوستان میگن اگه بشه ۱. صب تا شب پای سیستم باشیم و ۲.استراتژی خوبی بچینیم و نهایتا ۳.احساسی عمل نکنیم اونوقت احتمالا میشه سود کرد توی این بازار.

    ربات خرید و فروش چه کمکی میتونه بکنه؟

    این تیتر رو بیشتر برای سئو زدم و اصلا مهم نیس و قطعا شما دیگه میدونید که ربات میتونه همه ی اون مشکلاتی که گفتم رو حل کنه. ینی هم ۷ روز هفته و ۲۴ ساعت شبانه روز پای سیستمه اگه سرور ۹۹.۹۹٪ آپتایم داشته باشه. از اونور استراتژی های مختلف هم اگه توی ربات تعریف بشه باز این مشکل هم به مرور زمان حل میشه و شما راه رو پیدا میکنید. نهایتا ربات که با صفر و یک کار میکنه احساسات نداره خداروشکر. لذا این روزا این آدما نیاز شدیدی دارن که یه ربات داشته باشن. در ادامه میخوام در مورد اینکه برای نوشتن ربات چیا باید بلد باشیم هم صحبت میکنم.

    ابزارها و زبان های لازم برای نوشتن ربات تریدر

    برای نوشتن ربات باید اطلاعات خوبی در زمینه ی برنامه نویسی بکند داشته باشید. در واقع شما باید بتونید از API صرافی های مختلف سر در بیارید و بعد ازشون دیتا بگیرید و نهایتا بتونید درخواست سفارش های خودتون رو روی صرافی های مختلف ثبت کنید. بعنوان نمونه میتونید صرافی های زیر رو چک کنید.

    بایننس بزرگترین صرافی ارز دیجیتال در دنیا

    برای ارسال درخواست به این API ها میتونید از یک زبان برنامه نویسی مثل PHP یا پایتون استفاده کنید یا حتی میتونید برای شروع از ابزارهایی مثل Postman استفاده کنید. اگر با یک زبان برنامه نویسی کار میکنید برای اینکه کد شما همیشه بالا باشه باید یه سرور داشته باشید و برای اینکه داده ی خودتون رو روی سرور ذخیره کنید باید یک نرم افزار مدیریت دیتابیس مثل MySQL داشته باشید.

    استفاده از Trading View برای نوشتن ربات

    تریدینگ ویو یه سایته که یکی از کاراش اینه که به شما چارت میده که میتونید با اون چارت ها استرتژی های خودتون رو مدل کنید. تریدینگ ویو یه چیزی داره به اسم alert که شما میتونید روی نمودار ها اعلان ست کنید که وقتی شرایطی که مد نظر شماست اتفاق افتاد برای شما اعلان ارسال بشه. این اعلان ها میتونن بصورت web hook باشن. ینی به سرور شما درخواستی ارسال کنن. نهایتا حتی شما میتونید استرتژی ها رو با زبان Pine که یه زبان برنامه نویسی مخصوص خود تریدینگ ویو هست بنویسید و اعلان ها واستون ارسال بشن. ینی لازم نیست شما داده رو بگیرید و پردازش کنید. استراتژی رو بصورت ویژوال میچینید و خرید و فروش اتوماتیک روی صرافی مد نظرتون انجام میشه.

    جمع بندی

    بصورت خلاصه این یک مطلب کلی در مورد مسیر بود. شما میتونید در مورد تک تک این موضوعات سرچ کنید و ربات خودتون رو بنویسید. البته مد نظر داشته باشید که بجز دانش برنامه نویسی باید بتونید استراتژی خوب بچینید که منجر به چیزای خوب بشه. و نکته ی دیگه ای که بازم مهمه داشتن سرمایه هست دیگه. شما بهترین استرتژی رو هم داشته باشی بدون سرمایه خطریه 🙂

    اگه نیاز به برنامه نویسی دارید که همه ی اینارو داره (بجز سرمایه) با ما تماس بگیرید.

  • آرگومان های با نام یا named arguments در PHP

    آرگومان های با نام یا named arguments در PHP

    تصور کنید که یه تابع به این صورت دارید که دو تا پارامتر اختیاری داره که مقدار پیشفرض رو توی ورودی تابع واسشون تعریف کردیم:

    function test($x = 1, $y = 2) {
        var_dump($x, $y);
    }

    اگه مقدار اول رو نیاز داشته باشیم پاس بدیم بهش و دومی رو ندیم همه چی اوکیه و برای متغیر دوم مقدار پیشفرض ست میشه:

    test(3);
    
    // Output:
    int(3)
    int(2)

    ولی از اونجایی که توی PHP آرگومان ها باید به ترتیب ارسال بشن نمیتونیم بگیم که مقدار اولی دیفالت باشه یا اون رو ازش بگذر و برو دومی رو مقدار دهی کن. یا باید آپشناله آخرین آرگومان باشه یا باید همون مقدار دیفالت رو مثلا دوباره بهش بدیم. خوشبختانه از ورژن PHP 8 توی این آر اف سی، این امکان اضافه شد که بشه آرگومان ها رو با نام فرستاد. ینی میتونیم به این صورت عمل کنیم:

    
    <?php
    
    function test($x = 1, $y = 2) {
        var_dump($x, $y);
    }
    
    
    test(y:3);
    
    // Output:
    int(1)
    int(3)
    

    جاهایی که تعداد زیادی متغیر اختیاری داریم خیلی به درد میخوره این مدل فراخوانی تابع.

    منابع:

  • ارسال با رفرنس در PHP

    ارسال با رفرنس در PHP

    توی پی اچ پی بجز اشیا بقیه ی مقادیر پریمیتیو هستند و رفرنس تایپ نیستن. ینی شما مثلا وقتی یه آرایه رو به یک آرایه دیگه assign میکنید اون دو تا آرایه جاهای جدا از حافظه رو اشغال میکنن و طبیعی هست که تغییر یکی روی اونیکی اثری نذاره. یه مثال ساده:

    <?php
    
    $numbers = [1, 2, 3];
    
    $anothers = $numbers;
    
    $anothers[1] = 5;
    
    var_dump($numbers);
    
    // Output:
    
    array(3) {
      [۰]=>
      int(1)
      [۱]=>
      int(2)
      [۲]=>
      int(3)
    }

    اشیا اینطور نیستن و میشه توی این مثال راحتتر منظورم رو برداشت کرد:

    <?php
    
    class Test {
        public $name;
    }
    
    $t1 = new Test();
    $t1->name = "Test 1";
    
    $t2 = $t1;
    $t2->name = "Test 2";
    
    var_dump($t1->name);
    
    // Output:
    string(6) "Test 2"

    برای اینکه اشیا رو ازشون کپی بگیریم خیلی راحت ازش clone میگیریم:

    <?php
    
    class Test {
        public $name;
    }
    
    $t1 = new Test();
    $t1->name = "Test 1";
    
    $t2 = clone $t1;
    $t2->name = "Test 2";
    
    var_dump($t1->name);
    
    // Output:
    string(6) "Test 1"

    پریمیتیو ها رو هم میشه مثل رفرنس اساین کرد به یه علامت & قبل از متغیری که میخواد اساین بشه:

    $a = 2;
    $b = &$a;
    $b++;
    var_dump($a);
    
    // Output:
    int(3)

    و نهایتا اگه بخوایم چیزی که primitive هست رو بصورت رفرنس ارسال کنیم یه علامت & قبل از اسمش میذاریم. به این صورت:

    $x = 3;
    
    function change(&$x) {
        $x++;
    }
    
    change($x);
    
    var_dump($x);
    
    // Output:
    
    int(4)

    توی یه سری زبون ها نیازه که جایی که کال میکنیم هم علامت رو بذاریم ولی توی پی اچ پی فقط توی ورودی تابع بنویسیم کافیه.

    امیدوارم به دردتون بخوره.

  • عملگرهای اجرایی در PHP

    عملگرهای اجرایی در PHP

    توی پی اچ پی با این تابع میشه یچی روی توی شل ران کرد:

    shell_exec(string $command): string|false|null

    یه راه سریع تر و قشنگ تر برای این هم هست که اینجوریه که شما کامند رو توی بک کوت میذارید و خود به خود ران میشه واستون. مثلا کد زیر رو اگه ران کنید واستون خروجی ls -a رو میده:

    <?php
    
    $output = `ls -a`;
    
    echo "<pre>{$output}</pre>";

    که واسه من چیزی شبیه اینه:

    .
    ..
    alpine.html
    backticks.php
    index.html
    integ.py
    php_io.php
    venv

    شاد باشید 🙂

  • اصلاح جدول‌های لاراول بعد از migrate کردن

    اصلاح جدول‌های لاراول بعد از migrate کردن

    حتما اگه مدتی با لاراول کار کرده باشید میدونید که مایگریشن های لاراول چیزای خطرناکی ان 🙂 از این جهت که ممکنه یه چیزی رو مایگریت رول بک کنید و داده ای که دارید رو از دست بدید. خب سوالی که پیش میاد اینه که پس چجوری فیلد ها رو ادیت کنیم؟ داکیومنت مایگریشن خود لاراول پکیج doctrine/dbal رو پیشنهاد میکنه برای اینکه تغییرات رو روی جدول ها انجام بدیم.

    فرض کنید اول کار من یه فیلد از مایگریشن ام رو اینجوری درست کردم:

    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title', 500);
        $table->text('body')->nullable();
        $table->timestamps();
    });

    حالا میخوام به جدول یه فیلد دیگه اضافه کنم به اسم published. برای این کار به صورت زیر عمل میکنم که اول یه مایگریشن درست میکنم:

    php artisan make:migration alter_posts_add_published_field

    و بعد توی متد up کاری که میخوام رو انجام میدم:

    Schema::table('posts', function (Blueprint $table) {
        $table->boolean('published')->nullable();
    });

    با مایگریت کردن مجدد تغییراتی که دادید اعمال میشه. حالا فرض کنید همین فیلد آخری رو میخواید مقدار default واسش بذارید. برای تغییر در فیلدهای موجود پکیج زیر رو نصب کنید:

    composer require doctrine/dbal

    یه مایگریشن جدید درست میکنید:

    php artisan make:migration alter_posts_add_default_value_to_published_field

    و از فانکشن change برای اعمال تغییرات استفاده کنید:

    Schema::table('posts', function (Blueprint $table) {
        $table->boolean('published')->default(0)->change();
    });

    اگه تابع change رو نذارید خطای زیر رو میگیرید چون فکر میکنه که دارید فیلد رو اضافه میکنید:

    SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'published' (SQL: alter table `posts` add `published` tinyint(1) not null default '0')

    اگه تابع change رو بذارید آخر مایگریشن ولی dbal نصب نباشه این خطا رو میگیرید که اینم مشخصه چی میگه:

    Changing columns for table "posts" requires Doctrine DBAL. Please install the doctrine/dbal package.

    نکته ی دیگه ای که باید مد نظر داشته باشیم اینه که اگر مثلا یه کلید خارجی دارید اضافه میکنید باید حواسمون باشه که کلید خارجی و لوکال با هم compatible باشن که البته این نکته توی ساخت همون مایگریشن ها هم مهمه دیگه.

    اگه دیدید خیلی مایگریشن هاتون زیاد شدن میتونید با این فیچر از شرشون خلاص بشید.

    موفق باشید 🙂

  • استفاده از valet برای لاراول

    استفاده از valet برای لاراول

    لاراول تلاش میکنه همه چی رو راحت کنه و ابزارهایی که واسش میان هم تلاششون برای همینه انگار 🙂 لاراول ولت یه ابزار خوب برای توسعه ی لوکال روی مک هست که میتونه دامین های مجازی برای سایت های شما درست کنه و میتونه ورژن های مختلف پی اچ پی رو خیلی راحت در دسترس شما قرار بده. روی nginx هست و اینم شاید بد نباشه برای ماها. و نهایتا خوبی جدیدی که بهش اضافه شده اینه که میتونید باهاش بگید روی فلان پروژه فلان ورژن پی اچ پی ران بشه و روی اونیکی ورژن دیگه ای.

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

    نصبش که خیلی راحته:

    brew install php

    و بعدش پکیج کامپوزرش:

    composer global require laravel/valet

    و نهایتا:

    valet install

    برای سوییچ بین ورژن های مختلف این شکلی عمل میکنیم:

    valet use php@7.2

    و برای اینکه دامین مجازی درست کنیم اینجوری:

    cd ~/Sites
     
    valet park

    این کامند کل دایرکتوری های مربوط رو واسشون دامین مجازی درست میکنه. ولی اگه میخواید یه فولدر خاص رو واسش دامین درست کنید اینجوری عمل کنید:

    cd ~/Sites/laravel
     
    valet link

    نهایتا اگه میخواید اسمش جدا از چیزی باشه که اسم فولدر هست:

    cd ~/Sites/laravel
     
    valet link application

    لینک های قبلی رو اینجوری ببینید:

    valet links

    و یچی رو آنلینک کنید:

    cd ~/Sites/laravel
     
    valet unlink

    همه ی اینارو گفتم که برسم به اینجا که میتونید یه دامین رو ایزوله کنید از بقیه و ورژن دیگه ای از پی اچ پی رو بهش بدید 🙂

    cd ~/Sites/example-site
     
    valet isolate php@8.0

    این خیلی سکسیه و قطعا دستی بخواید اینکارو بکنید داستان زیاد داره.

    بازم اوصیکم به داکیومنت 🙂 موفق باشید.

  • لیست دیتابیس های نمونه برای تمرین با MySQL

    لیست دیتابیس های نمونه برای تمرین با MySQL

    اگه دنبال دیتابیس های نمونه برای کار با دیتابیس و تمرین و یادگیری SQL و مشخصا MySQL هستید من در زیر لیست یسری دیتابیس رو براتون میارم و لینک دانلودشون رو میذارم که بتونید تمرین کنید.

    دیتابیس نمونه فروشگاه اینترنتی

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

    لیست جدول های این فروشگاه:

    • Customers: که داده مشتری ها داخلش ذخیره شده.
    • Products: محصولات فروشگاه رو توی خودش داره.
    • ProductLines: دسته بندی های محصولات هست.
    • Orders: سفارش های مشتری ها رو تو خودش داره.
    • OrderDetails: که آیتم های هر سفارش رو شامل میشه.
    • Payments: پرداخت های مشتری.
    • Employees: لیست کارمندهای فروشگاه و عناوین شغلی.
    • Offices: اطلاعات مراکز اداره ی فروش.
    فایل دانلود دیتای بالا رو میتونید در زیر دانلود کنید و توی دیتابیس خودتون ایمپورت کنید:

    استفاده از سایت فیل دی بی

    بعضی موقع ها ما دوست داریم دیتابیس ای که داریم با داده ی فیک پر بشه. توی لاراول یه چیزی داریم به اسم فکتوری ها که این کار رو با faker واسمون انجام میدن ولی در حالت کلی یک وبسایت هست به اسم فیل دی بی که میتونه اسکیمای جدول ها رو از شما بگیره و دیتای پر بهتون برگردونه. پس خیلی راحت از دیتابس خالی یه اکسپورت بگیرید بهش بدید و…