2017-08-12 3 views
0

Je construis une petite application dans Laravel 5.4 où je suis ayant des modèles: Interaction et InteractionSummary. Chaque interaction peut être créée par un utilisateur et chaque résumé d'interaction contient le contact d'une entreprise interagit avec. Donc, mon suivant est mes modèles:Eloquent où la clause dans laravel

utilisateur:

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

Société:

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

Contact:

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

Interaction:

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

Maintenant, je veux aller là où l'article pour trouver le modèle Company mentionné en tant que client dans le modèle InteractionSummary et obtenir tous les détails de résumé de la réunion de chaque réunion, donc J'ai essayé quelque chose comme ceci:

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

Il lance l'erreur de

Appel à la méthode définie Illuminate \ Database \ Query \ Builder :: interactionSummary()

Toutes les suggestions dans ce sont les bienvenus. Merci

Répondre

2

L'accès comme relation property renvoie un objet Collection.

La relation d'accès en tant que méthode vous donnera un objet Builder de sorte que vous pouvez appeler la méthode whereHas dessus.

Aussi: Vous avez interactionSummaries relation dans votre modèle Interaction pas interactionSummary.

Essayez cette

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

Je suppose que je fais la même chose. –

+0

@NitishKumar Dans votre question, vous faites ce '$ utilisateur-> interactions-> whereHas' –

+0

Je reçois ceci' Appel à la méthode non définie Illuminate \ Database \ Query \ Builder :: interactions() ' –

0

Vous devriez essayer ceci:

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

Espoir ce travail pour vous !!!

+0

Cela ne me aide, je l'ai déjà vérifié en retirant la demande et passer une chaîne vide. Il arrive que ce soit la même chose. –

+0

@NitishKumar Ok laissez-moi vérifier –