J'utilise Laravel 5.7 et mysql. J'ai besoin d'aide pour configurer mes relations éloquentes entre 3 tables.
Emplacements
{ { id: 1, name: Tax Services locations: { { id: 1, city: San Diego, state: California, }, { id: 2, city: Seattle, state: Washington, }, { id: 3, city: Seattle, state: Washington, }, } }, { id: 2, name: Legal Services locations: { { id: 3, city: Portland, state: Oregon, }, } } }
Services
location_id, service_id 1, 1 1, 2 3, 2
Allowed_Locations p>
id, name 1, Tax Services 2, Legal Services
Emplacements
id, city, state 1, San Diego, California 2, Seattle, Washington 3, Portland, Oregon
Services
location_id (id from Locations table) service_id (id from Services table)
Emplacements autorisés p >
id name
En gros, un service peut être disponible dans de nombreux endroits. Je veux pouvoir interroger les services, ainsi que les emplacements dans lesquels le service est disponible.
Voici un exemple de ce que je souhaite retourner. Je sais comment faire cela en utilisant MySQL mais je ne sais pas comment mettre en place des relations éloquentes
id city state
4 Réponses :
J'ai pu découvrir
public function locations() { return $this->belongsToMany('App\Locations', 'allowed_locations', 'service_id','location_id'); }
Il existe une relation plusieurs à plusieurs entre l'emplacement et le service, il vous suffit donc de lire la section des relations plusieurs à plusieurs de Laravel et d'ajouter des fonctions à vos modèles, ainsi que la migration pour votre tableau croisé dynamique. https://laravel.com/docs/5.7/eloquent-relationships# plusieurs à plusieurs
Salut Amin Bienvenue dans Stack Overflow. Je suggérerais d'inclure quelques exemples de code dans votre réponse. Cette réponse aurait beaucoup de valeur si les exemples de code utilisaient le schéma que l'OP a déjà détaillé. Bonne chance.
Vous pouvez également le faire Dans Service Model,
public function locations() { return $this->belongsToMany('App\Locations', 'allowed_locations'); }
Vous devez passer "service_id" comme troisième et "location_id" comme quatrième arguments si vous avez une clé primaire différente dans Services et le tableau Emplacements .
rendez cette relation éloquente dans votre service
$services = Service::with('locations')->get();
et dans le contrôleur utilisez cette requête pour obtenir tous les services avec plusieurs emplacements
public function locations() { return $this->belongsToMany('App\Location', 'allowed_locations', 'service_id','location_id'); }