yüzden çok-çok ilişkisi, ben 3 rolleri ile User
& Role
modelleri var: John
, Mike
, James
ve Larry
: 4 kullanıcıları en diyor let ile super
, admin
ve moderator
.belli Rolleri olmadan Birçok seçme Kullanıcıya Eloquent Birçok
John
James
bir admin
ve Larry
bir moderator
olduğu, Mike
admin
ve moderator
rolü bulunmaktadır, bir super
olup.
public function scopeDoesntHaveRoles($query, $roles = [], $column = 'id') {
return $query->whereDoesntHave('roles')->orWhereHas('roles', function ($q) use ($roles, $column) {
$q->whereNotIn($column, $roles);
});
}
Ben super
role sahip değildir kullanıcıları almak için User::doesntHaveRoles([1])->lists('name', 'id')
diyoruz, çalışıyor ve getiri: Belirli roller yoktur görüntüleyen kullanıcılar için bu kapsam yarattı
{"2":"Mike","3":"James","4":"Larry"}
Ama
: Ben o aslında ikenadmin
rol
User::doesntHaveRoles([2])->lists('name', 'id')
yok kullanıcıları, evet
James
orada gösterilmez ama
Mike
çıktı listeyle çalışırken
admin
rolü vardır
{"1":"John","2":"Mike","4":"Larry"}
Sanırım, Mike
'un moderator
rolü olduğu için, kapsamımda yanlış bir şey görüyor musunuz? ya da başka çözümleriniz var mı?
Teşekkür
Düzenleme: İşte benim Pivot şema
Schema::create('user_roles', function (Blueprint $table) {
$table->integer('user_id')->unsigned();
$table->integer('role_id')->unsigned();
$table->primary([
'user_id', 'role_id'
]);
});
User
modeli
public function roles()
{
return $this->belongsToMany(Role::class, 'user_roles');
}
Role
Modeli
public function users()
{
return $this->belongsToMany(User::class, 'user_roles');
}
Eğer 'roles' ve' users' arasındaki Pivot tablonun şema tarif edebilir gibi oluşturucu bir sorgu yaratacak sen uylaşımını tables.If bir ROLE_ID sütun üzerinde olmalıdır 'whereNotIn' yöntemini aramak istediğiniz. – shempignon
@shempignon Sadece temel bir pivot tablo, düzenlenmiş yayına bakın. – Rifki