【问题标题】:Laravel paginate (with foreign key)Laravel 分页(带外键)
【发布时间】:2021-03-15 15:11:01
【问题描述】:

我正在尝试使用 Laravel 从数据库中获取一些数据。提取部分工作正常,直到我想对数据使用分页。

在我的控制器 (RepairController) 中,我使用这个函数来获取所有内容(没有分页):

$pendingRepairs = Repair::get()->where('status.completed', 0);

这很好用。直到我添加分页功能。然后它给了我一个错误:

BadMethodCallException
Method Illuminate\Database\Eloquent\Collection::paginate does not exist.

互联网上的一些研究表明我需要删除 ::get() 部分。但是怎么做?既然我使用了 status.completed 外键值,那么使用 get 部分的替代方法是什么?

我的维修控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Repair;

class RepairController extends Controller
{
    public function index()
    {
        $allRepairs = Repair::get();
        $pendingRepairs = Repair::get()->where('status.completed', 0)->paginate(2);
        $doneRepairs = $allRepairs->where('status.completed', 1);

        return view('repair.index', [
            'pendingRepairs' => $pendingRepairs, 'doneRepairs' => $doneRepairs
        ]);
    }
....
}

在 Repair.php 我有一个指向状态的链接:

public function status() 
    {
        return $this->belongsTo(\App\Status::class);
    }

有什么想法吗?谢谢:)

【问题讨论】:

    标签: laravel laravel-pagination


    【解决方案1】:

    您可以使用whereHas() 为关系添加约束。

    $pendingRepairs = Repair::whereHas('status', function($query) {
        $query->where('completed', 0);
    })
    ->paginate();
    

    【讨论】:

      【解决方案2】:

      有很多方法可以做到这一点。首先是Anurat 的回答。

      还有另一种方法来加入你需要的表

      在不同的情况下,它们将以不同的复杂性工作。 请注意, whereHas 会做subselect

      $pendingRepairs = Repair::query()
          ->join('statuses', 'statuses.repair_id', 'repairs.id')
          ->where('statuses.completed', 0)
          ->select('repairs.*')
          ->paginate();
      

      如果您的表名是:repairs statuses 并且您有 repair_id 外键,如果不只是替换它们:)

      【讨论】:

        【解决方案3】:

        感谢所有回复。

        我认为它们都会起作用。但是我发现了数据表(datatables.net)的使用。 由于这将添加分页本身,因此我不再需要 Larvel。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-12-29
          • 1970-01-01
          • 2019-08-06
          • 1970-01-01
          • 1970-01-01
          • 2019-01-24
          • 2018-06-04
          相关资源
          最近更新 更多