1
votes

Comment configurer des relations éloquentes avec une table de requête où la relation entre deux tables existe dans une troisième table

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


0 commentaires

4 Réponses :


1
votes

J'ai pu découvrir

public function locations() {
    return $this->belongsToMany('App\Locations', 'allowed_locations', 'service_id','location_id');
}


0 commentaires

0
votes

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


1 commentaires

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.



2
votes

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 .


0 commentaires

0
votes

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


0 commentaires