suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Ändern Sie die Paginierungswerte in der Laravel-Modellmethode, indem Sie Anforderungen abfangen

In meiner Laravel-Anwendung habe ich einen API-Einstiegspunkt, an dem ich erste Daten für meine Anwendung sammle, z. B. erhalte ich paginierte Ergebnisse für Beiträge, Tags, Benutzer ...

Ich verwende paginate:15 für alle Datensätze, aber für Benutzer möchte ich paginate:30 verwenden, weil ich in meinen Anforderungsparametern so etwas habe:

page=1&paginate=15

Gibt es eine Möglichkeit, es in meiner Controller-Methode auf 30 zu ändern?

Anfänglicher Controller

$users = $this->userService->getUsersPaginated($request);
$users = $this->vuePaginate($users);

In meinem Benutzermodell:

public function getUsersPaginated($request)
    {
        
        $users = User::
        paginate($request['paginate']);
        


        return $users;
    }
P粉295728625P粉295728625287 Tage vor735

Antworte allen(2)Ich werde antworten

  • P粉127901279

    P粉1279012792024-03-23 12:20:23

    根据用户类型,评估是否可以在前端处理分页大小。

    无论如何,如果您想在后端处理它,您可以找到一个条件来设置分页大小。
    例如:

    if ($currentUser->role == 'final-user')  // 或类似的条件
       $perPage = max (30, $request['paginate']);
    else
       $perPage = $request['paginate'];
    
    $users = User::paginate($perPage);

    我还建议您为分页设置一个最小值和最大值,以避免来自前端的错误值引起问题(想象一下如果您得到一个像1,000,000或-1这样的值)

    const DEFAULT_RESULTS_PER_PAGE = 15;
    const FINAL_USER_RESULTS_PER_PAGE = 30;
    const MAX_RESULTS_PER_PAGE = 100;
    
    /* ... */
    
    public function getUsersPaginated($request)
    {
        $perPage = min (max ($request['paginate'] ?: self::DEFAULT_RESULTS_PER_PAGE, 1), self::MAX_RESULTS_PER_PAGE);
    
        if (/* condition */)
            $perPage = max (self::FINAL_USER_RESULTS_PER_PAGE, $perPage);
    
        $users = User::paginate($perPage);
    
        /* ... */

    还要注意,默认的分页器请求变量是per_page

    Antwort
    0
  • P粉092737458

    回复信息

    P粉092737458 · 2024-03-27 11:28:55
  • StornierenAntwort