wdjopa
wdjopa 80 XP
asked

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 :

$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": [
...
]
}
mckenziearts
posted

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)

muarachmann
posted
Best answer

@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()

wdjopa
wdjopa 80 XP
posted

@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

You need Log in or Create an account to join the conversation.