dtwkt46424 2017-06-02 14:47
浏览 23
已采纳

Laravel在关系中遇到麻烦

I'm having trouble when a user is not an admin. The goal is to get only those requests that belong to the user, but when I use the where clause, I get all the requests from the DB. It was supposed to get all the requests only for an admin.

Thank you for the help!

public function index(){
    $status = request('status', -1);
    $paper_size = request('paper_size', -1);

    if (auth()->user()->isAdmin()) {
        $requests = Request::
            where('paper_size', $paper_size)->orWhereRaw($paper_size. ' = -1')->
            where('status', $status)->orWhereRaw($status. ' = -1')->


            orderBy(
                request('orderby') ? request('orderby') : 'created_at',
                request('order') ? request('order') : 'DESC'
            )->paginate(10);

        $departments = Departament::All();


        return view('Requests.index', compact('requests', 'departments'));
    }

    $requests = auth()->user()->requests()->
        where('status', $status)->orWhereRaw($status. ' = -1')->
        where('paper_size', $paper_size)->orWhereRaw($paper_size. ' = -1')->
        orderBy(
            request('orderby') ? request('orderby') : 'created_at',
            request('order') ? request('order') : 'DESC'
        )->paginate(10);

        return view('Requests.index', compact('requests'));
}

UPDATE:

I can already list all user requests, but the status filter does not work.

Ps: the filter "paper_size" is working as expected

SOLVED:

Thanks to the whole community, and especially to @Sandeesh

    public function index(){
    request('status') == -1 || request('status') == null ?
        $statusExists = false : $statusExists = true;
    $status = request('status');

    request('paper_size') == -1 || request('paper_size') == null ?
        $paper_sizeExists = false : $paper_sizeExists = true;
    $paper_size = request('paper_size');

    $is_admin = auth()->user()->isAdmin();

    $requests = Request::when($statusExists, function ($query) use ($status) {
        return $query->where('status', $status);
    })
        ->when($paper_sizeExists, function ($query) use ($paper_size) {
            return $query->where('paper_size', $paper_size);
        })
        ->when(!$is_admin, function ($query) {
            return $query->where('owner_id', auth()->id());
        })
        ->orderBy(request('orderby', 'created_at'), request('order', 'desc'))
        ->paginate(10);

    if (!$is_admin) {
        return view('Requests.index', compact('requests'));
    }

    $departments = Departament::all();

    return view('Requests.index', compact('requests', 'departments'));
}
  • 写回答

3条回答 默认 最新

  • douxian9943 2017-06-02 15:39
    关注

    Wrap your where and orWhereRaw conditions together for a single column. Or use when instead of the workaround you apply with -1 = -1. I've also refactored the code for you.

    public function index()
    {
        $status = request('status');
        $paper_size = request('paper_size');
    
        $is_admin = auth()->user()->isAdmin();
    
        $requests = Request::when(!is_null($status), function ($query) use ($status) {
                return $query->where('status', $status);
            })
            ->when(!is_null($paper_size), function ($query) use ($paper_size) {
                return $query->where('paper_size', $paper_size);
            })
            ->when(!$is_admin, function ($query) {
                return $query->where('owner_id', auth()->id());
            })
            ->orderBy(request('orderby', 'created_at'), request('order', 'desc'))
            ->paginate(10);
    
        if (!$is_admin) {
            return view('Requests.index', compact('requests'));
        }
    
        $departments = Departament::all();
    
        return view('Requests.index', compact('requests', 'departments'));
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)
  • ¥50 mac mini外接显示器 画质字体模糊