2016-03-11 129 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