دسته: مقدمات لاراول

  • نصب MongoDB و استفاده در لاراول

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

    توجه: همه کارایی که من میگم روی Ubuntu 18.04.3 تست شده و بقیه جاها رو نمیدونم.

    بعد از اینکه لاراول رو نصب کردید خیلی راحت با دستور زیر مانگو رو هم نصب کنید (البته برای این بخش بهتره از طریق داکیومنت مانگو دی بی پیش برید).

    sudo apt-get install -y mongodb-org 

    معروف ترین پکیجی که لاراولی ها برای کار با مانگو باهاش کار میکنن jenssegers/laravel-mongodb هست که میتونید نصبش کنید ولی قبلش باید یکار دیگه هم بکنید و اون هم اینه که درایور PHP برای مانگو رو نصب کنید. من چند تا راه رو رفتم و این پست از داکیومنت PHP واسم جواب داد. در واقع اگه PECL داشته باشید خیلی راحت با این کامند کارتون راه میفته:

    sudo pecl install mongodb

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

    sudo service mongod start

    اگه دستور بالا بدون هیچ پیامی اجرا شد ینی کارتون درسته. بعد باید وارد اینترفیس مانگو بشید و یه یوزر بسازید. برای این کار mongo رو تایپ کنید و اینتر کنید. یه دیتابیس به صورت زیر بسازید.

    use test

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

    show dbs

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

    db.getUsers()

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

    db.createUser({user:'admin', pwd:'Aa123', roles: [{role:"readWrite", db:"test"}]})

    و حالا برید کانکشن دیتابیس رو توی فایل database.php بسازید. و بعدش دیفالت کانکشن رو هم تغییر بدید.

    'mongodb' => [
        'driver'   => 'mongodb',
        'host'     => env('DB_HOST', 'localhost'),
        'port'     => env('DB_PORT', 27017),
        'database' => 'test',
        'options'  => [
            'database' => 'admin' 
        ]
    ],
    'default' => env('DB_CONNECTION', 'mongodb'),

    من یوزر و پسورد رو هم اینجا گذاشتم و اررور داد. شما اون یکی دو تا رو توی فایل .env بذارید.

    DB_CONNECTION=mongodb
    DB_HOST=localhost
    DB_PORT=27017
    DB_DATABASE=test
    DB_USERNAME=admin
    DB_PASSWORD=Aa123

    و حالا php artisan migrate کنید. ایشالا که همه چی اوکی باشه.

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

    mongorestore --db test ./orgdictionary

    استفاده از Eloquent در لاراول با MongoDB

    اگه میخواید از Eloquent توی لاراول استفاده کنید باید مدل هاتون رو از Eloquent پکیج اسکتند کنید. بعنوان مثال برای مدل Post بصورت زیر عمل کنید:

    use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
    class Post extends Eloquent
    {

    }

    حالا میتونید توی کنترلرتون از App\Post::all() و… استفاده کنید. البته برای جدول یوزر باید یه حرکت بیشتر هم بکنید و اون اینه:

    use Illuminate\Contracts\Auth\Authenticatable;
    use Jenssegers\Mongodb\Eloquent\Model as Eloquent;
    
    use Illuminate\Auth\Authenticatable as AuthenticableTrait;
    class User extends Eloquent implements Authenticatable
    {
         use Notifiable;
         use AuthenticableTrait;
    {

    این باعث میشه که توی مرحله Auth هم به اررور نخورید و مثل حالت معمولی با Auth::attempt لاگین کنید.

  • خطای لاراول ۶ بعد از نصب

    اگه لاراول ۶ رو میخواید نصب کنید و وقتی php artisan serve کردید اررور زیر رو گرفتید:

    No application encryption key has been specified.

    دو تا خط زیر رو ران کنید که حل بشه مشکلتون:

    php artisan key:generate 
    php artisan config:cache
  • مشکل migrate در لاراول ۵

    اگه بعد از php artisan migrate  کردن اررور زیر رو میگیرید :

     [PDOException]                                    
      SQLSTATE[HY000] [2002] No such file or directory

    توی فایل app\database.php  مقدار localhost  رو به ۱۲۷٫۰٫۰٫۱  تغییر بدید… معمولا توی ابونتو همچین مشکلی هست …

  • حل مشکل Warning: putenv() has been… در laravel

    Warning: putenv() has been disabled for security reasons in /home/yoursite/public_html/vendor/vlucas/phpdotenv/src/Dotenv.php on line 86

    اگه ورژن php هاستتون زیر ۵٫۶ باشه این پیام نمایش داده میشه… برای حل این مشکل از قسمت select php version  هاستتون اقدام کنید و یا با پشتیبانی هاستتون تماس بگیرید

  • کارکردن با pivot table ها یا جداول محور در laravel

    مجددا باید بگم که من همه کارام رو توی لاراول ۵٫۰٫۰ انجام میدم 🙂

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

    یک مثال کاملا واقعی در مورد رابطه های چند به چند در لاراول

    توی داکیومنت رسمی لاراول مثالی که واسه روابط چند به چند اومده ، رابطه ی role و user هست که یک یوزر میتونه متعلق به چند نقش باشه و برعکس، یعنی یک نقش مثل ادمین هم میتونه متعلق به چند کاربر باشه. من یه مثال ملموس تر براتون میزنم : رابطه ی محصولات و فروشگاهها رو در نظر بگیرید. شما نیاز دارید که بدونید مثلا گوشی فلان رو چه فروشگاههایی دارن و همچنین نیاز دارید بدونید که فلان فروشگاه چه گوشیهایی داره.

    $Shop->products();//for grab products of a shop...
    $Product->shops();//and reverse...

    جدول های مورد نظر میتونن به شکل زیر باشن :

    shops
    – id
    – name
    products
    – id
    – name
    product_shop
    – product_id
    – shop_id

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

    برای اینکه این جدول رو درست کنیم میتونیم از مایگریشن های خود لاراول استفاده کنیم. مثلا در یک وبلاگ، پست ها و تگ ها دارای رابطه چند به چند هستند که جدول post_tag رو میتونیم به صورت زیر بسازیم :

    Schema::create('post_tag', function(Blueprint $table)
    {
    	$table->integer('post_id')->unsigned();
    	$table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
    
    	$table->integer('tag_id')->unsigned();
    	$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
    });

    جدول  post_tag رو اصطلاحا بهش میگن pivot table. نام جدول pivot باید بصورت first_second باشه که first نام جدول اول و second نام جدول دوم هست. ترتیب هم باید بر اساس حروف الفبا باشه.  بصورت پیشفرض جدول pivot دوتا فیلد داره : post_id و tag_id که میتونید فیلد های بیشتری هم بهش اضافه کنید . مثلا برای اینکه شما یک پلن رو به یک کاربر اختصاص بدید میتونید تاریخ پایان پلن رو هم توی جدول میانی یا همون pivot ذخیره کنید. برای بدست آوردن مقدار فیلد های دیگه هم میتونید از این روش استفاده کنید :

    public function products()
    {
        return $this->belongsToMany('App\Products')
        	->withPivot('products_amount', 'price')
        	->withTimestamps();
    }
    
  • حل مشکل invalid default value for created_at در لاراول

    در ادامه طرح سوالات ابتدایی لاراول ، این پست رو منتشر میکنم 🙂

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

     [Illuminate\Database\QueryException]
      SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'created_at' (SQL: create table `
      users` (`id` int unsigned not null auto_increment primary key, `name` varchar(255) not null, `email` varchar(255) n
      ot null, `password` varchar(60) not null, `remember_token` varchar(100) null, `created_at` timestamp default 0 not
      null, `updated_at` timestamp default 0 not null) default character set utf8 collate utf8_unicode_ci)

    این خطا بخاطر اینه که مای اس کیو ال شما مقدار صفر رو بعنوان مقدار پیشفرض تاریخ قبول نمیکنه . احتمالا شما NO_ZERO_DATE رو توی تنظیمات mysqlتون فعال کردید… اگه با ومپ کار میکنید به پوشه ی (مثلا) C:\wamp64\bin\mysql\mysql5.7.9  برید و فایل my.ini  رو باز کنید و مقادیر NO_ZERO_DATE,NO_ZERO_IN_DATE, رو سرچ بزنید و حذف کنید و mysql رو ریستارت کنید

    الان همه چی حله… php artisan migrate  رو برای تست ران کنید.

  • آموزش نصب Illuminate/HTML در لاراول ۵

    چند روزیه تو یه گروه تلگرامی لاراول عضوم ، انقد سوالای سطح پایین پرسیده میشه که قلبت درد میگیره… تصمیم گرفتم هر از چندگاهی در مورد مقدمات لاراول حرف بزنم و خب اولین چیزی که ملت درگیرشن همین Illuminate/HTML هست… توی لاراول ۴ هلپر  HTML بصورت پیشفرض وجود داره و توی لاراول ۵ برداشته شده… خوشبختانه HTML بصورت یه پکیج جدا وجود داره و میتونید ازش استفاده کنید براحتی…

    برای نصب Illuminate/HTML ابتدا کد زیر رو توی روت پروژه ران کنید :

    composer require "illuminate/html":"5.0.*"

    قدم دوم اینه که /config/app.php  رو باز کنید و خطهای زیر رو اضافه کنید :

    'providers' => [
    	...
     
    	'Illuminate\Html\HtmlServiceProvider',
    ],
     
    'aliases' => [
     
    	...
     
    	'Form'=> 'Illuminate\Html\FormFacade', 
    	'Html'=> 'Illuminate\Html\HtmlFacade',
    ],

    الان همه چی حله… برای تست هم میتونید از ابزار tinker استفاده کنید

    php artisan tinker
    > Form::text('foo')
    "<input name=\"foo\" type=\"text\">"

    موفق باشید 🙂

    الان دیگه html از هسته لاراول جدا شده و بصورت پکیج جدا از illuminate در laravelcollective.com توسعه داده میشه… برای نصبش توی composer.json کد زیر رو اضافه کنید :