réponses
207 vues
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}
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)
@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()
@mckenziearts, la relation était :
1// App/Models/Blog.php2class Blog {3 public function Tag()4 {5 return $this->belongsToMany(Blog::class);6 }7}1// App/Models/Blog.php2class Blog {3 public function Tag()4 {5 return $this->belongsToMany(Blog::class);6 }7}
1// App/Models/Tag.php2class Tag {3 public function blogs()4 {5 return $this->hasMany(Tag::class);6 }7}1// App/Models/Tag.php2class 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
Il faut Se connecter ou Créer un compte pour participer à cette conversation.