在laravel中加入查询以避免报告滥用用户

时间:2018-10-24 15:55:03

标签: mysql laravel laravel-5

我正在尝试在两个表之间创建联接,以避免在用户列出我正在做的事情中使用报告滥用:

我有什么 我有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);

我在这里做错了,这就是为什么我没有得到正确的结果。

你们能帮助我吗,万分感谢。

谢谢

1 个答案:

答案 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);