Php 将WHERE子句应用于laravel返回范围

Php 将WHERE子句应用于laravel返回范围,php,laravel,Php,Laravel,我在我的一个laravel模型上有一个范围,可以返回与另一个表中包含的模型相关的数据: public function scopeWithShortlistedApplications($query) { $query->with('shortlisted_applications:shift_id,user_id,shortlisted'); } 这里,入围的_应用程序是关系,指的是一个名为shift_user的表,该表附带了应用程序模型,定义如下 public functio

我在我的一个laravel模型上有一个范围,可以返回与另一个表中包含的模型相关的数据:

public function scopeWithShortlistedApplications($query)
{
    $query->with('shortlisted_applications:shift_id,user_id,shortlisted');
}
这里,入围的_应用程序是关系,指的是一个名为shift_user的表,该表附带了应用程序模型,定义如下

public function shortlisted_applications() 
{
    return $this->hasMany(Application::class, 'shift_id');
}
我想做的是在作用域上放置一个简单的WHERE子句,这样它只返回“shortlist”字段等于1的实例(这是一个布尔值)。我尝试了以下两种方法,但均无效:

public function scopeWithShortlistedApplications($query)
{
    $query->with('shortlisted_applications:shift_id,user_id,shortlisted')
        ->whereRaw('SELECT shortlisted from shift_user WHERE shift_id = "' . $this->id '"', 1);
}


有人知道如何在scope函数中实现这一点吗?

渴望加载约束应该能够为您做到这一点:

...->with(['shortlisted_applications' => function ($query) {
    $query->where('shortlisted', 1);
}]);

这仍将加载主结果集,但仅当这些记录的
短名单==1

时,才立即加载这些记录的关系。是否要约束立即加载,还是要基于与所需条件的关系的存在来限制主结果集?我想基于“入围”字段的值。Aka,它不应该加载shortlisted=0的值“load”表示仅约束渴望加载的渴望加载,但对主要结果集(作用域实际所在的模型)没有影响。。您想根据关系的条件限制主模型的结果集(范围存在的结果集)?我不太熟悉术语,但我基本上需要从“shift_user”表中获得结果,因为“shortlisted”字段所在的位置,我从那里得到的结果应该限制在“入围名单”=1的地方。我使用这个作用域的模型有一个“shift”表,它与“shift\u user”表有一个关系。。。只需遵循这些示例,您应该非常完美。谢谢,您将如何限制此处返回的列?我曾经做过“入围的应用程序:列、列、列”,但这在这里不起作用。您只需添加一个select语句来限制它(
$query
是一个生成器,因此您可以将select添加到其中)。。。只需确保选择关系所需的任何列(外键、id字段等),这样Eloquent就可以在加载关系后将子项与父项进行匹配
...->with(['shortlisted_applications' => function ($query) {
    $query->where('shortlisted', 1);
}]);