2017-05-31 109 views
0

我想创建一个搜索栏,但将结果限制为共享同一家公司的用户。 此功能工作正常:数据库查询:选择行的位置和位置

public function search(Request $request) { 
    if ($user = Sentinel::check()) { 
     $users = User     
      ::where('first_name', 'like', '%' . $request->text . '%') 
      ->orWhere('last_name', 'like', '%' . $request->text . '%') 
      ->limit(2) 
      ->get() 
      ->map(function ($item) { 
       $item['url'] = route('user.single', ['id' => $item->id]); 
       $item['title'] = $item['first_name'] . ' ' . $item['last_name']; 
       $item['type'] = 'User'; 
       return $item; 
      }) 
      ->toArray(); 
    } 
} 

但我想加上一条:

->andWhere ('companies_id', 1) 
+1

,什么是阻止你这样做? – Epodax

+0

- >和哪里不可能有一个选项... – Kaherdin

+0

只需添加: - > where('comanies_id',1)在orWhere声明之后有什么问题? –

回答

1

您可以简单地添加where子句

public function search(Request $request) { 
    if ($user = Sentinel::check()) { 
     $users = User     
      ::where('first_name', 'like', '%' . $request->text . '%') 
      ->where('companies_id', 1) 
      ->orWhere('last_name', 'like', '%' . $request->text . '%') 
      ->limit(2) 
      ->get() 
      ->map(function ($item) { 
       $item['url'] = route('user.single', ['id' => $item->id]); 
       $item['title'] = $item['first_name'] . ' ' . $item['last_name']; 
       $item['type'] = 'User'; 
       return $item; 
      }) 
      ->toArray(); 
    } 
} 

这将导致该查询

WHERE `firstname` LIKE '%?%' 
AND `company_id` = 1 
OR `lastname` LIKE '%?%' 

,但我认为它应该是

WHERE `company_id` = 1 
AND (
    `firstname` LIKE '%?%' 
    OR `lastname` LIKE '%?%' 
) 

因此,这些答案应该是正确的:https://stackoverflow.com/a/44281362/6193316

+0

天哪,很明显...谢谢! – Kaherdin

+0

请接受解决方案 –

0

必须使用相同的结构 '和' 例如:其中( 'companies_id', '=', '1')

0

我觉得您的查询应该可以正常工作与此

$users = User::where(function($query) use ($request) { 
     $query->where('first_name', 'like', '%' . $request->text . '%') 
      ->orWhere('last_name', 'like', '%' . $request->text . '%'); 
    }) 
    ->where('companies_id', '=', 1) 
    ->limit(2) 
    ->get() 
    ->map(function ($item) { 
     $item['url'] = route('user.single', ['id' => $item->id]); 
     $item['title'] = $item['first_name'] . ' ' . $item['last_name']; 
     $item['type'] = 'User'; 
     return $item; 
    }) 
    ->toArray(); 
0
public function search(Request $request) { 
if ($user = Sentinel::check()) { 
    $users = User     
     ::where('first_name', 'like', '%' . $request->text . '%') 
     ->where('companies_id', 1) //you can add multiple 
     ->orWhere('last_name', 'like', '%' . $request->text . '%') 
     ->limit(2) 
     ->get() 
     ->map(function ($item) { 
      $item['url'] = route('user.single', ['id' => $item->id]); 
      $item['title'] = $item['first_name'] . ' ' . $item['last_name']; 
      $item['type'] = 'User'; 
      return $item; 
     }) 
     ->toArray(); 
} 

}

0

很简单

$select = DB::('table_name')->where('column_name','value') 
          ->where('cloumn_name1','value') 
          ->get();