2017-08-24 7 views
0
$institutes = Institute::with(['address' => function($query){ 
       $query->whereCityId(Input::get('city_id')); 
       $query->whereIn('area_id',Input::get('area_id')); 
       }])->get(); 

Invalid argument supplied for foreach()Comment faire laravel désireux de charger avec plusieurs contraintes?

+0

peut vous donner des détails sur l'erreur – StateLess

+0

je veux tous les instituts d'adresse où CITY_ID qui est en adresses table et area_id qui est également dans la table d'adresses correspond aux conditions d'entrée –

+0

S'il vous plaît examiner ce [lien] (https://laravel.com/docs/5.4/eloquent-relationships#querying-relations) .Voici le Plus d'informations sur la requête Relations.Utiliser pour whereHas a été installé. –

Répondre

0

Il fonctionne, mais il retourne

address: null 

où les matches de l'état. Mais il renvoie tous les instituts. Ou bien nous pouvons utiliser filtre sur la collection ou whereHas

$institutes = Institute::whereHas('address', function ($query) use ($city_id) { 
        $query->whereCityId($city_id); 
       })->get(); 

ou

$institutes = Institute::with(['address' => function ($query) use ($city_id) { 
        $query->whereCityId($city_id); 
       }])->get()->filter(function ($institute){ 
        return $institute->address != null; 
       }); 
0

Le problème pourrait être ici

$query->whereIn('area_id',Input::get('area_id')); 

Essayez de faire en sorte que Input::get('area_id') retourne en fait un tableau:

$area = Input::get('area_id') ?: []; 
$query->whereIn('area_id',is_string($area) ? json_decode($area, true) : $area); 
+0

il retourne un tableau! –

0

est whereCityId la portée du modèle? La documentation a des exemples avec des étendues chaînées avec des modèles uniquement. Essayez de remplacer le scope par le nom de la colonne et essayez. ex remplacé par city_id

$institutes = Institute::with(['address' => function($query){ 
        $query->where('city_id',Input::get('city_id')); 
        $query->whereIn('area_id',Input::get('area_id')); 
        }])->get();