join查询避免报表滥用

lnlaulya  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(264)

我正在尝试在两个表之间创建一个连接,以避免在用户列表中使用报告滥用我正在做的事情如下所示:
我有两张table
用户表

id |  name  |  
1  |  testA | 
2  |  testB |
3  |  testC |
4  |  testD |
5  |  testE |

报告滥用表格

id | reported_by|  reported_to
1  | 1          |  2
2  | 1          |  3

现在我需要的是当我查询时,我应该只得到2条记录4和5
我所做的是创建一个查询来获取上述记录,即:

DB::table('users as U')
->select('U.id','U.name')
->where('U.id', '!=', auth()->user()->id)
->leftJoin('report_abuse as RA', 'RA.reported_by', '=', 'U.id')
->where('RA.reported_by', '=', auth()->user()->id)
->where('RA.reported_to', '!=', 'U.id')
->orderBy('U.id', 'desc')
->paginate(10);

我做错了,所以我没有得到正确的结果。
你们能帮帮我吗,非常感谢。
谢谢

hts6caw3

hts6caw31#

如果我明白的话,你需要用户名单,不包括他报告的那个人和他自己。
这里有一个解决方案

$authId = auth()->user()->id;
DB::table('users as U')
    ->select('U.id','U.name')
    ->where('U.id', '!=', $authId)
    ->leftJoin('report_abuse as RA', function ($report) use ($authId){
        $report->on('reported_to', '=', 'U.id')
            ->where('reported_by', '=', $authId);
    })
    ->whereNull('reported_to')
    ->orderBy('U.id', 'desc')
    ->paginate(10);

相关问题