Exception or error:
I need your help on my foreign key problem.
I have three tables users — role_user — role with a foreign keys on role_user and a table for constraints foreign key on role_user
But nothing works.
I insert in ‘users’ table but nothing in ‘role_user’ table and ‘role’ table
- ‘role_user’ table take the ‘user_id’ and ‘role_id’
- ‘role’ table take the ‘role’
Thank you very much for your help
see my code:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('users', function (Blueprint $table) {
//$table->engine = 'InnoDB';
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('role');
//$table->foreign('role')->references('id')->on('roles');
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('users');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRolesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('roles', function (Blueprint $table) {
//$table->engine = 'InnoDB';
$table->bigIncrements('id');
$table->string('role');
//$table->foreign('role')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('roles');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateRoleUserTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('role_user', function (Blueprint $table) {
//$table->engine = 'InnoDB';
$table->bigIncrements('id');
$table->bigInteger('role_id')->unsigned();
$table->bigInteger('user_id')->unsigned();
//$table->foreign('role_id')->references('id')->on('roles');
//$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('role_user');
}
}
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateForeignKeysForRoleUserTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('role_user', function (Blueprint $table) {
//$table->engine = 'InnoDB';
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('role_user', function(Blueprint $table){
$table->dropForeign('role_user_user_id_foreign');
$table->dropForeign('role_user_role_id_foreign');
});
}
}
User Model
public function roles(){
return $this->belongsToMany('App\Role');
}
/*
public function role(){
return $this->belongsToMany(\App\RoleUser::class);
}
*/
public function hasAnyRoles($roles){
if($this->role()->whereIn('role', $roles)->first()){
return true;
}
return false;
}
public function hasRole($role){
if($this->roles()->where('role', $role)->first()){
return true;
}
return false;
}
Role model:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
protected $guarded=[];
public function users(){
return $this->belongsToMany('App\User:');
}
/*
public function admins(){
return $this->belongsToMany(\App\RoleUser::class);
}
*/
}
How to solve: