ورود

View Full Version : دریافت اطلاعات از ارتباط چند به چند



kab00k
یک شنبه 24 تیر 1397, 10:05 صبح
توی لاراول
یه جدول users داریم
یه جدول roles
جدول واسط role_user


هر کاربر میتونه چند تا نقش داشته باشه و یک نقش میتونه مربوط به چند تا کاربر باشه


حالا میخوام کاربرانی که نقش 1 و 5 دارند پیدا کنم
با کد زیر . کاربرانی که هم نقش 1 و هم نقش 5 داره نمایش داده میشن
یعنی کاربری اگه نقش 1 داشته باشه نمایش داده میشه
من میخوام کاربرانی که فقط 1 و 5 و یا بیشتر دارند نمایش داده بشن
یعنی کاربری که نقش 1 و 2 و5 داره هم نمایش داده بشه


$roles_id = [1,5];
$Get = Users::whereHas('roles', function ($query) use ($roles_id){
$query->whereIn('id', $roles_id);
});

ممنون میشم راهنمایی کنید

plague
یک شنبه 24 تیر 1397, 15:05 عصر
من که متوجه نشدم سوالت چیه یکم بهتر توضیح بده

kab00k
یک شنبه 24 تیر 1397, 15:36 عصر
ببینید

یه جدول users داریم
id:increment
name:string


یه جدول roles
id:increment
name:string


جدول واسط role_user
role_id:increment
user_id:increment

هر کاربر میتونه چند نقش داشته باشه
و هر نقش هم میتونه متعلق به چند کاربر باشه ManyToMany
توی مدل user


function roles(){
return $this->belongsToMany('App\roles');
}

و توی کنترلر


$roles_id = [1,5];
$Get = Users::whereHas('roles', function ($query) use ($roles_id){
$query->whereIn('role_id', $roles_id);
});

این کد به من کاربرانی که رول 1 یا 5 دارن را میده . اما من کاربرای را میخوام که فقط رول 1 و 5 دارند.




مثلا کاربر A رول 1,2,3 داره
کاربر B رول 1,3,5,6 داره
کاربر C رول 5,7
کاربر D رول 6,7
با دستور بالا کاربرانی که برمیگردونه A,B,C هستند .




میخوام کدی باشه که فقط کاربر B را بگیره . اونی که هر دوتا رول داره .

plague
یک شنبه 24 تیر 1397, 19:31 عصر
اگه میخای همه رو ببینه اینجوری بنویس


$query->where('role_id', 1)->where('role_id', 5);

اینجوری هم میشه


foreach($roles_id as $rid )
$query->where('role_id', $rid);

kab00k
دوشنبه 25 تیر 1397, 09:07 صبح
سپاس
اما این کد هیچ نتیجه ای برنمیگدونه

plague
دوشنبه 25 تیر 1397, 14:12 عصر
این پکیج رو نصب کن روی پروژت که بتونی کوئری های که اجرا میشه رو ببینی چی هستن
https://github.com/barryvdh/laravel-debugbar