2017-06-22 1 views
0

Salut J'ai un problème pour faire ma Laravel requêteLaravel: Interrogation et accéder à des objets de l'enfant dans la relation imbriquée avec les clauses where plusieurs à plusieurs

Régions Modèle

class Region extends Model 
{ 
    protected $table = 'regions'; 

    protected $guarded = [ 

    ]; 

    public function county() 
    { 
     return $this->belongsTo('App\Models\County'); 
    } 


    public function companies() 
    { 
     return $this->belongsToMany('App\Models\CompanyInfo', 
     'region_company','region_id','company_id'); 
    } 

Modèle Catégorie

class Category extends Model 
{ 
    protected $table = 'categories'; 

    protected $guarded = []; 


    public function companies() 
    { 
     return $this->belongsToMany('App\Models\Company', 'categories_company','category_id','company_id'); 
    } 
} 

Société Modèle

class Company extends Model 
{ 

    protected $table ='companies'; 

    protected $guarded = [ 

    ]; 

    public function regions() 
    { 
     return $this->belongsToMany('App\Models\Region', 'region_company','company_id','region_id'); 
    } 

} 

J'ai un formulaire d'entrée où je veux filtrer par catégorie et région et la sortie devrait être des catégories avec les entreprises si possible, mais je veux montrer seulement 10 entreprises par catégorie. Pas sûr que ce soit possible.

voici ce que j'ai jusqu'à présent

$categories = $request->input('categories'); 

    $region = $request->input('regions'); 

    $companies = Category::whereIn('id',$categories)->with([ 
     'companies.regions' => function ($query) use ($region) { 
      $query->whereIn('id', $region); 
     }])->get(); 

le problème ici est qu'il est le filtrage des catégories, mais il est encore de me donner toutes les entreprises ne filtre pas la fois qui appartiennent à certaines régions.

merci Dany

Répondre

0

Effectuez les opérations suivantes:

$categories = $request->input('categories'); 
$region = $request->input('regions'); 

$companies = Category::whereIn('id',$categories)->with([ 
    'companies' => function ($query) use ($region) { 
     $query->whereHas('region', function ($q2) use ($region){ 
      $q2->whereIn('id', $region); 
     }); 
     $query->with(['region']); 
     $query->limit(10); 
    }])->whereHas('companies', function($q) use ($region) { 
     $q->whereHas('region', function ($q2) use ($region){ 
      $q2->whereIn('id', $region); 
     }); 
    })->get(); 
+0

Salut @ clod986 merci pour la réponse rapide mais je reçois une erreur de syntaxe d'erreur, unexpected '$ query' (T_VARIABLE) il semble que après $ q2-> whereIn ('id', $ région); } il manque quelque chose que j'ai essayé; et, mais toujours le même problème – user1859876

+0

@ user1859876 devrait fonctionner maintenant, j'ai oublié de fermer les déclarations – clod986

+0

@ user1859876 si elle vous donne une "ID indice indéfini" erreur, remplacer ID avec REGION_ID ou REGIONS.ID – clod986