🔥جمعه سیاه در راکت با (( ۷۰ درصد )) تخفیف! این فرصت دیگه تکرار نمیشه
مشاهده دورههاسلام به همگی دوستان.
من داخل فایل web.php یه روت رو به شکل زیر تعریف کردم .
Route::get('/test' , function (){
$user = auth()->user();
// return $user;
$role = $user->roles;
// return $role;
$permission = $role->permission;
return $permission;
});
وقتی user و role رو return می کنم اطلاعتشون به صورت کامل بر میگرده. ولی وقتی permission رو return می کنم. اررور زیر رو نمایش میده.
Property [permission] does not exist on this collection instance.
این کد های مربوط به مایگریشنم.
public function up()
{
Schema::create('permissions', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('title');
$table->timestamps();
});
Schema::create('permission_role', function (Blueprint $table) {
$table->id();
$table->foreignId('role_id');
$table->foreignId('permission_id');
$table->timestamps();
});
Schema::create('roles', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('title');
$table->timestamps();
});
Schema::create('role_user', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id');
$table->foreignId('role_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('permissions');
Schema::dropIfExists('permission_role');
Schema::dropIfExists('roles');
Schema::dropIfExists('role_user');
}
کدهای مربوط به مدل User
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',
];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [
'email_verified_at' => 'datetime',
];
public function articles()
{
return $this->hasMany(Article::class);
}
public function courses()
{
return $this->hasMany(Course::class);
}
public function roles()
{
return $this->belongsToMany(Role::class);
}
کدهای مربوط به مدل Role
class Role extends Model
{
// protected $guarded = [];
public function users()
{
return $this->belongsToMany(User::class);
}
public function permissions()
{
return $this->belongsToMany(Permission::class , 'permission_role' , 'permission_id');
}
}
کدهای مربوط به مدل Permission :
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Permission extends Model
{
public function roles()
{
return $this->belongsToMany(Role::class , 'permission_role' , 'role_id');
}
}
@Ali.Abbasi1381
دوست عزیز شما در قسمت زیر یک آرایه از Role ها رو دریافت میکنید پس مستقیما نمیتونید به Permissions های اون Role دسترسی داشته باشید.
$role = $user->roles;
اگر دقت کنید اسم تابع هم Roles عه که یعنی "role های" مربوط به هر کاربر
شما میتونید با کد زیر تقریبا به Permission های هر Role دسترسی داشته باشید.
$roles = $user->roles;
foreach($roles as $role){
$p = $role->permissions;
}
@Ali.Abbasi1381
ظاهرا هر یوزر شما چندین رول داره، یا یک رول داره و چون ارتباط چندگانه هست array بر میگردونه . یعنی کد زیر شما collection بر میگردونه :
$role = $user->roles;
پس در این قسمت باید یک role انتخاب کرده و permissions های اون رو بگیرید. و یا از relation های بین role - permission استفاده کنید :
$permission = $role[0]->permission;
return $permission;
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟