Laravel 在模型中的关系实例上有什么

Laravel 在模型中的关系实例上有什么,laravel,laravel-5,Laravel,Laravel 5,我有以下问题,我想定义一个特定的属性,而不是每次都通过控制器查询它。但目前,我不确定该去哪里,因为whereHas不适用于收藏 当前“我的模型”属性如下所示: public function getPrimaryBillingContactAttribute(){ $primaryBillingContact = $this->contacts->whereHas('contactType', function ($query) { $query->where(

我有以下问题,我想定义一个特定的属性,而不是每次都通过控制器查询它。但目前,我不确定该去哪里,因为whereHas不适用于收藏

当前“我的模型”属性如下所示:

public function getPrimaryBillingContactAttribute(){
  $primaryBillingContact = $this->contacts->whereHas('contactType', function ($query) {
      $query->where('id', '=', '2');
  })->first();
  return $primaryBillingContact;
}
如果有必要,我会仔细检查控制器,我只是希望为我的客户模型定义一个有效的全局属性


谢谢

我认为全局变量不是正确的方法,因为您现在不能在查询中这样做。但为了方便起见,我将whereHas转换为一个集合方法,该方法也可以实现同样的功能,因为我似乎是您的主要问题,应该让属性getter工作

$this->contacts->filter(function (Contact $contact) {
    return $contact->contactType->id === 2;
})->first();

基本上,在一个条件下通过所有触点循环,该条件仅返回id为2的触点类型的触点。拿第一个,就像whereHas一样。我希望这足以帮助您前进。

您能给我们看一下您的完整型号吗?尝试在关系中添加(),例如$this->contacts()->