2017-08-12 116 views
0

我在Laravel 5.4中构建了一个小应用程序,其中我有模型:Interaction和InteractionSummary。每个交互可以由用户创建,并且每个交互摘要包含与之交互的公司的联系人。所以,我的下面是我的模型:嵌套雄辩laravel中的where子句

用户:

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'); 
} 

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(); 

它抛出错误

调用未定义的方法照亮\数据库\查询\生成器:: interactionSummary()

在这个任何建议都欢迎。由于

回答

2

访问关系为property返回一个Collection对象。

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

另外还有:您的interactionSummaries关系在您的Interaction型号不是interactionSummary

试试这个

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

我想我也是这样做的。 –

+0

@NitishKumar在你的问题,你正在做这个'$ user-> interact-> whereHas' –

+0

我得到这个调用未定义的方法照亮\数据库\查询\ Builder ::交互()' –

0

你应该试试这个:

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

希望这对你的工作!

+0

这不是帮助我,我已经通过删除请求,并传递一个空字符串检查。它恰好是相同的。 –

+0

@NitishKumar好吧,让我检查一下 –