آفلاین
user-avatar

Joins query

3 سال پیش
توسط محمدرضا عطوان آپدیت شد
آفلاین
user-avatar
bardia ( 22836 تجربه )
3 سال پیش
تخصص : Golang/Laravel

سلام
من دوتا جدول دارم جدول user و blockuser
با استفاده از یک لیست انتخابی user ها رو انتخاب می کنبم برای مسدود کردن کاربر
زمانی که کاربر مسدود میشه user_id اون کاربرمیره توی جدول blockuser
حال من میخوام زمانی که لیست رو میخوام انتخاب کنم اون کاربری که مسدود شده بود رو نشون نده در واقع کاربر های که مسدود شده نشده اند رو نشون بده
این join query هست که من نوشتم اما عمل نمی کنه همون افرادی که توی لیست بلاک هستند رو دوباره نشون میده

 $user_list = DB::table('users')
            ->join('blockusers', 'users.id', '=', 'blockusers.user_id')
            ->select('users.*')
            ->pluck("name","id");
آفلاین
user-avatar
محمد مهدی کارگر ( 18129 تجربه )
3 سال پیش
تخصص : طراح و برنامه نویس

سلام به نظرم می تونید از یک کوئری شبیه این استفاده کنید.

DB::table(..)->select('all users')->whereNotIn('select id from blockusers ')->get();
آفلاین
user-avatar
ناصر رمضانپور ( 1559 تجربه )
3 سال پیش

سلام
می تونی به لینک زیر مراجعه کنی که کامل توضیح داده باید چی کارش کنید
https://laracasts.com/discuss/channels/eloquent/laravel-get-records-from-one-table-that-doesnt-exist-in-another-with-a-where-clause-attached

آفلاین
user-avatar
محمدرضا عطوان ( 9861 تجربه )
3 سال پیش

این کاری که شما انجام دادید یه کار کاملا غیر اصولیه
باعث میشه درخواست های sql بالا بره و وقتی اطلاعاتتون بیشتر بشه دچار مشکلی میشید
پیشنهاد میکنم حتما درمورد نرمال سازی جداول دیتابیس مطالعه کنید
شما باید تو همون جدول users یک فیلد به نام blocked میذاشتید

مثلا اینطوری

$table->string('blocked')->default(false);
برای ارسال پاسخ باید وارد سایت شوید