Php Laravel-属性在此集合实例上不存在

Php Laravel-属性在此集合实例上不存在,php,laravel,Php,Laravel,在我的用户模型上,我有一个查询,它给出了“属性[manager\u id]在此集合实例上不存在”错误。我想这是因为expiringUsers集合没有单个属性管理器id,但我不确定如何在查询中循环使用expiringUsers 我试图返回的是一组经理,他们的ID与即将到期的经理ID匹配 public function scopeManagers() { $expiringUsers = $this->ExpiringContractors(); // This

在我的用户模型上,我有一个查询,它给出了“属性[manager\u id]在此集合实例上不存在”错误。我想这是因为expiringUsers集合没有单个属性管理器id,但我不确定如何在查询中循环使用expiringUsers

我试图返回的是一组经理,他们的ID与即将到期的经理ID匹配

public function scopeManagers()
    {   

        $expiringUsers = $this->ExpiringContractors(); // This returns a collection of users
        return $mangers = $this->where(function($query) use ($expiringUsers){
                    $query->where('id', $expiringUsers->manager_id);
                })->get();



    }

你自己已经说过了。。。如果
$expiringUsers
集合
,则在不循环的情况下,您无法访问
管理器id
,但在这种情况下,您实际上不必这样做。如果要查询与任何
manager\u id
匹配的
id
,可以通过
where()
子句,结合
pluck()
方法:

$query->whereIn('id', $expiringUsers->pluck('manager_id'));
而且,您的代码可以简化为:

public function scopeManagers(){ 
  return $this->where(function($query){
    $query->whereIn('id', $this->ExpiringContractors()->pluck('manager_id'));
  })->get();
}

注意:
ExpiringContractors
实际上应该是
ExpiringContractors
;函数名通常是
camelCase

我知道我的思路是正确的。。。这很有道理,非常有效,谢谢。是的,谢谢你指出我的函数名错误,我会改正的。。。在你的答案的末尾还需要()。没问题!事实上,它不是;如果省略
()
,它将自动将其转换为
集合
/
模型
实例(取决于关系类型)。在您的情况下,两者都可以工作(因为它直接使用
$this
),但是是的,
()
只有在您明确需要
生成器
实例时才需要;
ExpiringContractors()
是一种关系吗?或者显式返回
集合的方法
?你是对的;您可能需要
()
,具体取决于它是什么。Yes expiringContractors()返回一个集合。很好的解释:)