gpt4 book ai didi

php - 枢轴上的 Laravel 5 过滤器

转载 作者:搜寻专家 更新时间:2023-10-31 21:27:24 24 4
gpt4 key购买 nike

我有两个表 Candidates & Qualifications 和一个名为 Results 的连接数据透视表。

我想做的是选择该中心的所有候选人,并按数据透视表中的值过滤他们。

因此从中心 1 中选择所有候选人,其中 pivot “status” = “REGISTERED”

我尝试了多种方法,目前正在使用下面的方法,但没有任何效果。

$candidates = Candidate::where('batch_centre_id','=', $id)->with(array('qualification' => function($q)
{
$q->wherePivot('status','=', 'REGISTERED');
}))->get();

任何建议将不胜感激

最佳答案

在 Eloquent 中,wherePivot 方法只能在关系上加载。你这样做的方式,你称它为 qualifications 关系,因此你正在获取 all candidates 然后,对于他们每个人,你正在加载status=REGISTERED 的资格。这就是您得到所有候选人的原因。

您可以通过使用 Eloquent 的 whereHas() 方法来解决这个问题,该方法让您可以通过某种关系的属性过滤您尝试获取的基础模型。在您的情况下,以下应该有效:

$candidates = Candidate::where('batch_centre_id','=', $id)
->whereHas('qualifications', function($q) {
$q->wherePivot('status','=', 'REGISTERED');
})->with('qualifications')->get();

通过这种方式,您将仅获得具有 status=REGISTERED 资格的候选人以及他们的所有资格。如果您想按状态额外过滤加载的资格,请像在代码中一样添加约束:

$candidates = Candidate::where('batch_centre_id','=', $id)
->whereHas('qualifications', function($q) {
$q->wherePivot('status','=', 'REGISTERED');
})->with(array('qualifications', function($q) {
$q->wherePivot('status','=', 'REGISTERED');
})->get();

关于php - 枢轴上的 Laravel 5 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34119005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com