راکت
حل شده

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

3 پاسخ

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

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

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

ثبت پرسش جدید

پاسخ‌ها

3
mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

بهترین پاسخ

میتونی برعکس عمل کنی یعنی به ازای هر 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());
    });
علی اسماعیلی
علی اسماعیلی
@aliesmaili.code

تخصص: php Laravel

@khanzadimahdi

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

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

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

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

شاید پاسخ شما همین‌جا باشد

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

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