嗨,我有這個代碼是用來搜索記錄的。
管理員可以查看所有記錄,這是針對管理員的查詢
$trainings = Training::where('staffName', 'LIKE', "%{$request->search}%")
->orWhere('programTitle', 'LIKE', "%{$request->search}%")
->orWhere('trainer', 'LIKE', "%{$request->search}%")
->paginate();
而員工應該只看到他們的記錄,那么如何將此條件添加到搜索功能的現有查詢中?這是我目前對員工搜索的查詢
$employees = Training::where('staffName',$username)
->orWhere('staffName', 'LIKE', "%{$request->search}%")
->orWhere('programTitle', 'LIKE', "%{$request->search}%")
->orWhere('trainer', 'LIKE', "%{$request->search}%")
->paginate();
uj5u.com熱心網友回復:
您對 orWhere 的使用是錯誤的,因為 orWhere 洗掉所有條件,如果它是真的,試試下面的代碼
Training::where('staffName', $username)
->where(function ($query) {
$query->where('staffName', 'LIKE', "%{$request->search}%")
->orWhere('programTitle', 'LIKE', "%{$request->search}%")
->orWhere('trainer', 'LIKE', "%{$request->search}%");
})
->paginate();
uj5u.com熱心網友回復:
這是查詢范圍派上用場的時候。
class Training extends Eloquent {
public function scopeFilterByRole($query, $roleId, $searchInput)
{
if ($roleId === 3) {
return $query->where('staffName', 'LIKE', "%{$searchInput}%")
}
return $query;
}
}
然后在你的控制器中
Training::where('programTitle', 'LIKE', "%{$request->search}%")
->orWhere('trainer', 'LIKE', "%{$request->search}%")
->FilterByRole(3, $request->search)
->get();
uj5u.com熱心網友回復:
您可以撰寫一個全域范圍,它將自動應用于所有現有查詢:
protected static function boot()
{
parent::boot();
static::addGlobalScope(function (Builder $builder) {
if (auth()->check() and auth()->user()->role == 3) {
$builder->where('staffName', 'LIKE', "%{request()->get('search_name')}%")
}
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/439696.html
上一篇:如何撰寫多維陣列php函式?
