首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel分页(带外键)

Laravel分页(带外键)
EN

Stack Overflow用户
提问于 2021-03-15 23:11:01
回答 3查看 83关注 0票数 0

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

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

代码语言:javascript
复制
$pendingRepairs = Repair::get()->where('status.completed', 0);

这可以很好地工作。直到我添加了分页函数。然后它会给我一个错误:

代码语言:javascript
复制
BadMethodCallException
Method Illuminate\Database\Eloquent\Collection::paginate does not exist.

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

我的RepairController:

代码语言:javascript
复制
<?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中,我有一个状态链接:

代码语言:javascript
复制
public function status() 
    {
        return $this->belongsTo(\App\Status::class);
    }

有什么想法吗?谢谢:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-03-16 00:17:10

谢谢你所有的回复。

我想它们都会起作用的。但我已经了解了数据表(datatables.net)的用法。因为这将添加分页本身,所以我不再需要Larvel一次。

票数 0
EN

Stack Overflow用户

发布于 2021-03-15 23:32:25

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

代码语言:javascript
复制
$pendingRepairs = Repair::whereHas('status', function($query) {
    $query->where('completed', 0);
})
->paginate();
票数 2
EN

Stack Overflow用户

发布于 2021-03-16 00:00:46

有很多方法可以做到这一点。第一件事是Anurat回答的whereHas。

还有另一种只连接您需要的表的方法

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

代码语言:javascript
复制
$pendingRepairs = Repair::query()
    ->join('statuses', 'statuses.repair_id', 'repairs.id')
    ->where('statuses.completed', 0)
    ->select('repairs.*')
    ->paginate();

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66640630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档