علی اسماعیلی
5 سال پیش توسط علی اسماعیلی مطرح شد
3 پاسخ

فیلتر یک رابطه many to many

سلام بین user و role رابطه many to many دارم میخوام کاربرانی رو برگردونم که role شماره ۱ و ۲ رو دارن فقط ۱ و ۲ نه role دیگه ای رو

    $users = $users->whereHas('roles', function ($q) {
        $q->whereIn('id', [1, 2]);
    });

ولی این کد جواب نمیده چون 1,3 رو برمیگردونه


ثبت پرسش جدید
mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش آپدیت شد
0

میتونی برعکس عمل کنی یعنی به ازای هر role یوزراشو بگیری و مرج کنی!

$roles = Role::whereIn('id',[1,2])->with('users')->get();

بعدش یه حلقه ران کن روی رول ها یوزرهاشون رو بگیر.
یا اینکه از whereNotIn استفاده کن و اون قسمتی که نمیخوای رو درج کن به صورت زیر

    $users = $users->whereHas('roles', function ($q) {
        $q->whereIn('id', [1, 2])
          ->whereNotIn('id', Role::whereNotIn('id', [1, 2])->get());
    });

علی اسماعیلی
تخصص : php Laravel
@aliesmaili.code 5 سال پیش آپدیت شد
0

@khanzadimahdi

سلام داداش اینی گفتید هم عمل نکرد

یکی از مشکلاتی whereIn داره اینه که مثلا من 1 و 2 میخوام
اونی که چه 1 و 2 رو داره
و هم اونی که 1 و 3 رو داره میاره راه حلی خودم به نظرم میرسه با حلقه for بتونم اکی کنم


mahdi khanzadi
تخصص : backend developer at Snapp mar...
@khanzadimahdi 5 سال پیش مطرح شد
0

از مثالی که با whereNotIn زدم استفاده کن دقیقا چیزیه که میخوای.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام