دریافت اطلاعات از ارتباط چند به چند
توی لاراول
یه جدول 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);
});
ممنون میشم راهنمایی کنید
نقل قول: دریافت اطلاعات از ارتباط چند به چند
من که متوجه نشدم سوالت چیه یکم بهتر توضیح بده
نقل قول: دریافت اطلاعات از ارتباط چند به چند
ببینید
یه جدول 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 را بگیره . اونی که هر دوتا رول داره .
نقل قول: دریافت اطلاعات از ارتباط چند به چند
اگه میخای همه رو ببینه اینجوری بنویس
$query->where('role_id', 1)->where('role_id', 5);
اینجوری هم میشه
foreach($roles_id as $rid )
$query->where('role_id', $rid);
نقل قول: دریافت اطلاعات از ارتباط چند به چند
سپاس
اما این کد هیچ نتیجه ای برنمیگدونه
نقل قول: دریافت اطلاعات از ارتباط چند به چند
این پکیج رو نصب کن روی پروژت که بتونی کوئری های که اجرا میشه رو ببینی چی هستن
https://github.com/barryvdh/laravel-debugbar