wdjopa
wdjopa 80 XP
a posé

Relations ManyToMany - OrderBy & Paginate

Hello les devis,

Mon problème est le suivant :

J'ai un model Tag qui est associé à un autre model Blog par une relation ManyToMany (c'est à dire avec une table intermédiaire blog_tag).

Je souhaite alors afficher les 5 premiers des Tags d'un Blog (rangé par order alphabétique)

J'ai essayé ceci :

1$tags = $blog->tags()->orderBy("name")->paginate(5);
1$tags = $blog->tags()->orderBy("name")->paginate(5);

mais ça ne fonctionne pas. J'ai ce message d'erreur

1{
2"message": "Method Illuminate\\Database\\Eloquent\\Collection::orderBy does not exist.",
3"exception": "BadMethodCallException",
4"file": "E:\\PROJETS\\WEB\\backendlamater\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\Macroable.php",
5"line": 103,
6"trace": [
7...
8]
9}
1{
2"message": "Method Illuminate\\Database\\Eloquent\\Collection::orderBy does not exist.",
3"exception": "BadMethodCallException",
4"file": "E:\\PROJETS\\WEB\\backendlamater\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\Macroable.php",
5"line": 103,
6"trace": [
7...
8]
9}
mckenziearts
a répondu

Premiere question si tu veux les 5 premiers pour ne pas faire par exemple

1$tags = $blog->tags()->orderBy("name")->limit(5);
1$tags = $blog->tags()->orderBy("name")->limit(5);

Fait voir la relation que tu as entre Tag et Blog dans le model Blog. Parce que ton erreur montre que tu as une Collection a la place d'une relation ManyToMany (Query Builder)

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

muarachmann
a répondu
Meilleure réponse

@wdjopa tags() ces't une collection, tu as besoin d'une relationship pour utilise orderBy() donc rassure toi que dans to model Blog tags() retourne un relationship instance de HasMany()

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

wdjopa
wdjopa 80 XP
a répondu

@mckenziearts, la relation était :

1// App/Models/Blog.php
2class Blog {
3 public function Tag()
4 {
5 return $this->belongsToMany(Blog::class);
6 }
7}
1// App/Models/Blog.php
2class Blog {
3 public function Tag()
4 {
5 return $this->belongsToMany(Blog::class);
6 }
7}
1// App/Models/Tag.php
2class Tag {
3 public function blogs()
4 {
5 return $this->hasMany(Tag::class);
6 }
7}
1// App/Models/Tag.php
2class Tag {
3 public function blogs()
4 {
5 return $this->hasMany(Tag::class);
6 }
7}

J'ai remarqué que j'avais fait une erreur dans la définition des relations

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer cette réponse ? Cette action est irréversible.

Il faut Se connecter ou Créer un compte pour participer à cette conversation.

Confirmer la suppression

Êtes-vous sûr de vouloir supprimer ce sujet ? Cette action est irréversible.