2017-06-02 73 views
0

當用戶不是管理員時遇到問題。目標是僅獲取屬於該用戶的請求,但是當我使用where子句時,我會從數據庫中獲取所有請求。 它應該只能得到所有請求管理員Laravel與關係中的問題

謝謝你的幫助!

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:

我已經可以列出所有的用戶請求,但是狀態過濾器不起作用。

PS:過濾器 「PAPER_SIZE」 正按預期

解決:

由於整個社會,特別是對@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')); 
} 
+1

首先,刪除該圖片並粘貼代碼,然後選擇代碼並按下圖標縮進代碼。然後,刪除網頁標籤,因爲您只需要SQL和Laravel的幫助。 – matiaslauriti

+0

完成,感謝您的提示 – BLDD

+0

建立一個名爲Request的模型類可能不是一個好主意。這也是[HTTP請求類]的名稱(https://laravel.com/docs/5.4/requests)。 – aynber

回答

1

包裝你where和​​條件共同爲一列。或者使用when而不是使用-1 = -1申請的解決方法。我也爲你重構了代碼。

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')); 
} 
+0

現在查詢返回用戶的請求,但是如果你選擇一個狀態或paper_size返回的請求是0. 好的提示,以減少代碼btw – BLDD

+0

轉儲'$ status','$ paper_size'和'$ is_admin'並顯示結果。有和沒有他們被選中。 – Sandeesh

+0

而不被選定的:(作爲用戶) $狀態=>空 $ PAPER_SIZE =>空 $ is_admin =>假 選自: $狀態=> 2 $ PAPER_SIZE => 3 $ is_admin =>假 ||| 我有3個狀態=> 0,1和2 和2個paper_size => 3,4 – BLDD

0

您將需要得到$user_id = Auth::id然後更新第二個查詢以獲得where user_id = $user_id語句(我不確定哪些表屬於該用戶)。

+0

我試過這個,我得到了我的用戶的請求,但是當我選擇狀態或paper_size和過濾器,我仍然獲得來自數據庫的所有請求 – BLDD

0

嘗試用:

$requests = Request::with('User') 
    ->where('user_id',\Auth::user()->user_id) 
    ->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); 
+0

我仍然得到所有的請求,只有在工作中的paper_size – BLDD

+0

刪除此行: - > orWhereRaw($ status。'= -1') –

+0

沒有任何變化 – BLDD