簡體   English   中英

在 Laravel 中按名稱過濾是正確的方法嗎?

[英]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);
}

我假設您已經在usersprojects表中建立了關系,因為您在原始帖子中提到了這一點。

但是,如果您還沒有定義關系,您也可以非常簡單地定義:

用戶.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM