Bonjour tout le monde. J'aurai une question pour vous.

J'ai plusieurs tables :

books (id;name)
1;carnet 1
book_legends (id;content)
1;ma légende
pois (id;name)
1;mon entreprise
2;ma deuxième entreprise
book_informations (id;model_type;model_id;book_id;position)
1;App\Models\Poi;1;1
2;App\Models\BookLegend;1;2
2;App\Models\Poi;2;3

Maintenant, je suis dans un Book (1), je récupère les book_informations avec un hasMany.

public function informations(): HasMany
{
    return $this->hasMany(BookInformation::class);
}

Mon truc, c'est que je voudrais "with" les datas qui sont dans model_type/model_id. Et c'est là que je bloque.
Auriez-vous des idées ?
Merci

2 réponses


Hello, je comprends rien du tout à la description. Un modèle de données plus clair serait bienvenue je pense.

Après, si la table "book_informations" est donc la table polymorphique, cela veut dire qu'il y à donc des morphTo dans les modèles Book, BookLegend, et Poi. Et que dans le morphable se trouve dans BookInformations.

Après le HasMany fait référence à genre "J'ai plusieurs BookInformation", donc ça veut dire que la relation polymorphique est en ManyToMany ? Ou c'est du BelongToMany ?

ManyToMany : https://laravel.com/docs/8.x/eloquent-relationships#many-to-many-polymorphic-relations
OneToMany : https://laravel.com/docs/8.x/eloquent-relationships#one-to-many-polymorphic-relations

Dans tous les cas pour apporter une réponse éclairée, je pense qu'il faudrait voir les modèles des dits objets. C'est trop flou.

Christophe

Mmmh pour ça faudrait faire du polymorphic

En gros ca donnerait il truc de ce style

Dans la class Poi et BookLegend:

public function books()
{
    return $this->morphToMany(Book::class, 'book-informations');
}

Et dans la classe Book:

public function pois()
{
    return $this->morphedByMany(Pois::class, 'book-informations');
}

public function bookLegends()
{
    return $this->morphedByMany(BookLegend::class, 'book-informations');
}