دورة laravel للمبتدئين الدرس الثامن عشر


فهاد  الدرس الثامن عشر من دورة laravel للمبتدئين غادي نكملوا الدورة ديالنا ونشوفوا واحد العلاقة لي شوية متقدمة لي هي ManyToMany فغادي نزيدو لكل مستخدم واحد role لي غادي يكون عندو وغادي نستعملوا هاد العلاقة باش نديرو هادشي.


1- إضافة table roles لقاعدة البيانات

فأول حاجة غادي تزيد table roles باش نزيدوها غادي نزيدو model Role بهاد ل commande :

php artisan make:model Role -m

من بعد غادي نمشي ل database/migrations غادي نلقى ل migration تزادت غادي نفتحها ونزيد ل code لي غادي يمكن من إضافة الحقول من بعد تدير ل commande :

php artisan migrate


الكود ديال الملف هو :

                                //
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateRolesTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('roles');
    }
}
                            

2- إضافة table لي غادي تجمع العلاقة ما بين ل user و role

فباش ندير لعلاقة ما بين ل user و role خص نزيد table وسيطة حيت العلاقة هنا هي ManyToMany ف table كتاخد اسم les deux models User و Role وكنرتبهم ترتيب ابجدي فهنا غادي نسميو table role_user حيت r قبل u فالترتيب فباش نزيدها غادي ندير ل commande :

php artisan make:migration create_role_user_table --create=role_user 

من بعد غادي نمشي ل database/migrations غادي نلقى ل migration تزادت غادي نفتحها ونزيد ل code لي غادي يمكن من إضافة الحقول من بعد تدير ل commande :

php artisan migrate

الكود ديال الملف هو :

                                //
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateRoleAndUserTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('role_user', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->integer('role_id')->unsigned();
            $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('role_user');
    }
}
                            

3- إضافة العلاقة فل model User

غادي نمشي ل model User.php غادي نزيد العلاقة لي حددتها بل fonction roles لي كتقولنا بلي كل مستخدم عندو role واحد أو أكثر.

الكود لي زدنا هو :

                                //
<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
    public function posts(){
        return $this->hasMany(Post::class);
    }
    public function roles(){
        return $this->belongsToMany('App\Role');
    }
}
                            

4- إضافة العلاقة فل model Role

غادي نمشي ل model Role.php غادي نزيد العلاقة لي حددتها بل fonction users لي كتقولنا بلي كل role خاص بمستخدم واحد أو أكثر.

الكود لي زدنا هو :

                                    //
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    //
    public function users(){
        return $this->belongsToMany('App\User');
    }
}