J'ai ces relations similaires à celle de la documentation et les relations sont fixées. les posts ont beaucoup de commentaires et de taux. les commentaires ont beaucoup de taux. C'est une relation polymorphe.
posts
id - integer
user_id -integer
body - text
comments
id - integer
post_id - integer
user_id - integer
body - string
rates
id - integer
user_id - integer
rate - integer
likable_id - integer
likable_type - string
Comment puis-je classer les messages et les commentaires les plus fréquents ? J'obtiens les messages et les taux respectifs de cette façon, mais les messages sont classés par ID par défaut, de même que les commentaires.
$posts=Post::with('comments','comments.rates','rates')->get();
foreach($posts as $post)
{
$post=$post->body; //post
foreach($post->comments as $comment)
{
$comment=$comment->body; //comment
$rateofcomment=$comment->rates->sum('rate'); //rate of comment
}
$rateofpost=$post->rates->sum('rate'); //rate of post
}
Mise à jour modifié dans post.php et comment.php
public function rates()
{
return $this->morphOne('App\Rate', 'likable')
->selectRaw('SUM(rate) as rateSum, likable_id')
->groupBy('likable_id');
}
et dans rate.php
public function likable()
{
return $this->morphTo();
}
En fait, ce code ci-dessous a fonctionné pour le premier du post. signifie que si je meurs ; le reste de l'exécution foreach il a affiché les taux.
$posts=Post::with('comments','comments.rates','rates')->get();
foreach($posts as $post)
{
$post=$post->body; //post
$rateofpost = $post->rates->rateSum;
print_r($rateofpost); die;
Mais si j'essaie de compléter la boucle foreach, il affiche l'erreur familière Trying to get property of non object ? c'est parce que tous les messages et commentaires peuvent ne pas avoir rateSum. Comment puis-je éviter cela ?