Laravel 5

Relation avec 2 tables pivot

Avatar de VincentPIEPLU
VincentPIEPLU

Bonsoir,

Je me confronte à un souci avec Eloquent. Je vous explique.

Déjà, je vous joins un schéma de la base de données que j'ai conçu http://www.laravelsd.com/share/hQcJcJ

Donc j'ai des propriétés (properties), j'ai des critères (criteria), et des types (types) + 2 tables pivot

Critères c'est par exemple, superficie, jardin .... Types, c'est par exemple, vente ou location

Maintenant, un critère peut être lié à une vente OU à une location mais il peut être aussi lié à une vente ET une location.

Voici les modèles que j'ai conçu :

Dans Property

    public function criteria()
    {
        return $this->belongsToMany(Criteria::class, 'criterion_property', 'property_id', 'criterion_id')->withPivot('value');
    }
    ```
    
Dans Criterion
public function types()
{
    return $this->belongsToMany(Type::class, 'criterion_type', 'criterion_id', 'type_id');
}

Je dois maintenant ressortir la liste des critères de la propriété seulement si le critère à bien le type_id équivalent à la table pivot criterion_type.

Pas facile à expliquer, j'espère que vous aurez compris ma demande ;) 

Merci encore





Posté il y a 4 mois
Avatar de bestmomo
bestmomo

Salut

J'ai un peu de mal à comprendre ton schéma, le pivot criterion_type en particulier...

Posté il y a 4 mois
Avatar de VincentPIEPLU
VincentPIEPLU

Je me suis peut être craqué sur la structure.

En gros,

  • j'ai une propriété qui a un type "vente". Les ventes ont des critères.
  • J'ai une propriété qui a un type "location". Les locations ont des critères

Certains critères sont propres aux ventes, d'autres aux locations, et parfois, ils peuvent se retrouver dans les 2.

Au final, je veux les critères de ma propriété 1 qui ont des critères "vente". je veux les critères de ma propriété 2 ont ont des critères "location".

Est ce plus clair comme explications ?

Merci de ton aide ;)

Posté il y a 4 mois
Avatar de bestmomo
bestmomo

Si tu te comprends déjà c'est bien :)

Donc tu as des propriétés que tu peux soit vendre, soit louer, dans chacun de ces cas tu as des critères et ces critères peuvent être communs aux ventes et aux locations.

Si je comprends bien pour une propriété tu peux avoir par exemple superficie 100m², jardin et piscine. Genres de critères qui sont aussi utiles pour une location. La valeur des impôts fonciers par contre n'est pas intéressant pour une location et donc constitue un critère exclusif d'une vente.

Donc en gros il faut que tu puisses distinguer les critères selon le type (vente ou location).

Je vois bien comme tables :

properties id name ...

criterions id name sale (booléen si le critère concerne la vente) leasing (booléen si le critère concerne la location) ...

criterion_property pivot entre properties et criterions criterion_id property_id value

De cette manière tu devrais facilement gérer tes requêtes...

Posté il y a 4 mois
Avatar de VincentPIEPLU
VincentPIEPLU

J'avais pensé comme tu proposes sauf que si j'ai d'autres types, ça multiplie le nombre de colonne et je me disais que je pourrais faire plus optimal. Dans l'idée, j'aurais : vente, location, location saisonnière, programme neuf... Tu vois, ça va faire bcp de colonne à la fin, d'où l'idée de partir sur un pivot, mais je n'arrive pas à en extraire les propriétés et critères liés :(

Posté il y a 4 mois
Avatar de bestmomo
bestmomo

Alors effectivement il faut :

criterions id name ...

types id name ...

criterion_type criterion_id type_id

Posté il y a 4 mois
Avatar de bestmomo
bestmomo

Je vois bien ce genre de requête :

$criterions = Criterion::whereHas('properties', function ($query) use($property_id) {
    $query->where('properties.id', $property_id);
})->whereHas('types', function ($query) use($type_name) {
    $query->where('types.name', $type_name);
})->get();
Posté il y a 4 mois
Avatar de VincentPIEPLU
VincentPIEPLU

Ok, du coup tu ferais ça en 2 requetes. Je vais essayer ça. Merci

Posté il y a 4 mois

Vous ne pouvez pas répondre à ce sujet.