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