Relations ManyToMany - OrderBy & Paginate

wdjopa @wdjopa 80 XP a posé dans
Résolu

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 :

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

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

{
"message": "Method Illuminate\\Database\\Eloquent\\Collection::orderBy does not exist.",
"exception": "BadMethodCallException",
"file": "E:\\PROJETS\\WEB\\backendlamater\\vendor\\laravel\\framework\\src\\Illuminate\\Support\\Traits\\Macroable.php",
"line": 103,
"trace": [
...
]
}
  • Premiere question si tu veux les 5 premiers pour ne pas faire par exemple

    $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)

  • Réponse acceptée

    @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 :

    // App/Models/Blog.php
    class Blog {
    public function Tag()
    {
    return $this->belongsToMany(Blog::class);
    }
    }
    // App/Models/Tag.php
    class Tag {
    public function blogs()
    {
    return $this->hasMany(Tag::class);
    }
    }

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

Veuillez vous connecter ou créer un compte pour participer à cette conversation.