laravel 中的嵌套 eloquent where 子句

Nested eloquent where clause in laravel

我正在 Laravel 5.4 中构建一个小型应用程序,其中我有模型:Interaction 和 InteractionSummary。每个交互都可以由用户创建,每个交互摘要都包含与之交互的公司的联系人。所以我的以下是我的模型:

用户:

public function interactions()
{
    return $this->hasMany('App\Interaction');
}

公司:

public function contacts()
{
    return $this->belongsToMany('App\Contact', 'company_contact', 'company_id','contact_id');
}

联系人:

public function companies()
{
    return $this
        ->belongsToMany('App\Company', 'company_contact','contact_id', 'company_id')->withTimestamps();
}

public function interactions()
{
    return $this->belongsToMany('App\Interaction', 'contact_client_interaction','contact_id', 'interaction_id');
}

互动:

public function contactsAssociation()
{
    return $this->belongsToMany('App\Contact', 'contact_interaction',  'interaction_id', 'contact_id')->withPivot('company_id')->withTimestamps();
}

public function interactionSummaries()
{
    return $this->hasMany('App\InteractionSummary');
}

互动总结

public function interaction()
{
    return $this->belongsTo('App\Interaction');
}

public function client()
{
    return $this->belongsTo('App\Company', 'company_id');
}

现在我想获取 where 子句以在 InteractionSummary 模型中找到称为客户的公司模型并获取每次会议的所有会议摘要详细信息,所以我尝试了这样的事情:

$user  = Auth::user();
$summaries = $user->interactions() 
                ->whereHas('interactionSummary', function($query){
                    $query->where('client', 'like', '%'.$request->input.'%');
                })->get();

它抛出

的错误

Call to undefined method Illuminate\Database\Query\Builder::interactionSummary()

欢迎提出任何建议。谢谢

你应该试试这个:

$summaries = $user->interactions
                ->whereHas('interactionSummary', function($query) use($request){
                    $query->where('client', 'like', '%'.$request->input.'%');
                })->get();

作为 property returns Collection 对象访问关系。

作为方法访问关系会给你一个 Builder 对象,这样你就可以调用它的 whereHas 方法。

此外:您的 Interaction 模型中有 interactionSummaries 关系,而不是 interactionSummary

试试这个

$user  = Auth::user();
$summaries = $user->interactions() 
                  ->whereHas('interactionSummaries', function($query) use ($request) {
                      $query->where('client', 'like', '%' . $request->input . '%');
                  })->get();