我正在尝试在两个表之间创建联接,以避免在用户列出我正在做的事情中使用报告滥用:
我有什么 我有2张桌子
用户表
id | name |
1 | testA |
2 | testB |
3 | testC |
4 | testD |
5 | testE |
report_abuse表
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);
我在这里做错了,这就是为什么我没有得到正确的结果。
你们能帮助我吗,万分感谢。
谢谢
答案 0 :(得分:1)
如果我理解,您需要排除他报告的人和他本人的用户列表。
这是解决方案
$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);