2017-05-31 108 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();