[英]Is it right way to filter by name in Laravel?
我想通過主管做一個過濾器,但是在傳遞名稱時,它通過下划線 _ 傳遞。 好的,我在 $request 中驗證 has() 時替換了它。 將名稱傳遞給請求的示例
我不確定這是否是正確的方法,但它有效。
我的控制器:
public function index(Request $request) {
$supervisors = User::where('role','supervisor')->get();
$filteredSupervisors = null;
foreach ($supervisors as $supervisor) {
if ($request->has(str_replace(" ","_",$supervisor->name)))
$filteredSupervisors[] = $supervisor->id;
}
if ($filteredSupervisors != null)
$projectsQuery->whereIn('user_id', $filteredSupervisors);
$projects = $projectsQuery->paginate(4);
我的看法:
@foreach($supervisors as $supervisor)
<label>{{ preg_replace('~^(\S++)\s++(\S)\S++\s++(\S)\S++$~u', '$1 $2.$3.', $supervisor->name) }}
<input name='{{ $supervisor->name }}' type='checkbox'>
</label>
@endforeach
對於您請求主管姓名的當前方法,我會推薦一些不同的方法。 您當前的腳本使用請求數組的key
作為傳遞給服務器的數據。 這樣做的問題是,查找您要查找的數據遠不那么直觀,並且一旦向這些請求添加更多鍵,就會減慢您的腳本速度,並且需要做更多的工作。
將您的帖子數據更改為:
Array(3) {
users[string:] => 'Sam_Xeros_Stack',
date_start[string] => null,
date_end[string] => null
}
然后,您可以在 Controller 中以更簡單的方式調用數據:
function index(Request $request)
{
// Only call where role === 'supervisor'
return User::where('role', 'supervisor')
// get the names based on the `users` param
->whereIn('name', explode('_', $request->users))
// Get the projects table relationship to that user
->with('projects')
// fetch the data
->paginate(4);
}
我假設您已經在users
和projects
表中建立了關系,因為您在原始帖子中提到了這一點。
但是,如果您還沒有定義關系,您也可以非常簡單地定義:
用戶.php
public function projects() {
return $this->hasMany('App\Project');
}
項目.php
public function user() {
return $this->belongsTo('App\User');
}
這將返回如下內容:
[
[
'id' => 1
'name' => 'Sam',
'projects' => [...]
],
[...]
]
這確實重組了您的一些邏輯,但我認為將來這將更容易供您參考。
必須處理數組鍵從來都不是一件有趣的事情,這讓 Laravel 可以通過一個簡單的查詢為您完成最繁重的工作,而無需使用 SQL 命令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.