2017-08-12 119 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好吧,讓我檢查一下 –