2016-03-11 128 views
0

需要關於這個簡單代碼的幫助,我應該替換哪些代碼 $users = User::all();所以我可以有條件地鏈接作用域方法並在最後對它進行分頁?Laravel 5雄辯的條件鏈查詢

我試着用$users = new User();啓動User對象,出現錯誤,試圖在VIEW上使用時得到非對象錯誤的屬性。

public function index() 
{ 
    // user search 

    $name = $this->request->name; 
    $email = $this->request->email; 

    $users = User::all(); 

    if (!empty($name)) { 
     $users->name($name); 
    } 

    if (!empty($email)) { 
     $users->email($email); 
    } 

    $users->paginate(5); 

    return view('admin.users.index',compact('users')); 
} 

在此先感謝

+0

你想顯示所有用戶? –

+0

我想在管理員點擊搜索按鈕時按名稱或電子郵件過濾用戶 – cyberfly

回答

1

試試這個:

$users = new User; 
if(!empty($name)) 
    $users->whereName($name); 
if(!empty($email)) 
    $users->whereEmail($email); 
$users =$users->paginate(5); 
+0

有多少用戶具有相同的名稱和電子郵件地址? –

+0

謝謝,我會稍後再試,並讓你知道結果 – cyberfly

+0

嗨,我在下面的鏈接找到了正確的答案http://stackoverflow.com/a/21739314/417899 – cyberfly

1
$users = DB::table('users'); 

$users = empty($email) ? $users->paginate(5) : $users->whereEmail($email)->paginate(5); 

你並不需要檢查一個名字,如果所有用戶都擁有一個電子郵件,因爲電子郵件始終是唯一的。這樣做的任務是更快,更方便。

在情況下,如果你需要檢查name或其他任何東西,你可以用這個:

$users = DB::table('users'); 

$users = empty($email) ? $users : $users->whereEmail($email); 
$users = empty($name) ? $users : $users->whereName($name); 

$users = $users->paginate(5); 
+0

謝謝你以後再試。我實際上想要選擇是通過名稱還是管理員進行搜索,還是同時進行搜索。其實這個問題只是一個更復雜的過濾器的例子,如按類型和平方英尺的屬性過濾器 – cyberfly

+0

我更新了我的文章,因此您可以爲查詢添加更多WHERE。 –

+0

嗨,我發現以下鏈接的正確答案http://stackoverflow.com/a/21739314/417899 – cyberfly