Reactable Ordering
Order by Reaction Counter
Add reaction counter aggregate of exact reaction type to reactables
$comments = Comment::query()
->joinReactionCounterOfType('Like')
->get();
joinReactionCounterOfType method adds reaction_like_count & reaction_like_weight virtual attributes to each comment in collection.
Custom counters virtual attributes prefix
Join methods supports chaining and their default virtual attributes prefix reaction_{$type} could be overridden with optional method argument.
$comments = Comment::query()
->joinReactionCounterOfType('Like')
->joinReactionCounterOfType('Dislike', 'hates')
->get();
Then each Comment instance will have reaction_like_count, reaction_like_weight, hates_count, hates_weight virtual attributes.
Order models by reaction counter count value
$comment = Comment::query()
->joinReactionCounterOfType('Like')
->orderBy('reaction_like_count', 'desc')
->get();
Order models by reaction counter weight value
$comments = Comment::query()
->joinReactionCounterOfType('Like')
->orderBy('reaction_like_weight', 'desc')
->get();
Order by Reaction Total
Add reaction total aggregate to reactables
$comments = Comment::query()
->joinReactionTotal()
->get();
Each Reactable model will contain reaction_total_count & reaction_total_weight virtual attributes.
Custom totals virtual attributes prefix
Default virtual attributes prefix is reaction_total, but it could be overridden with optional method argument.
$comments = Comment::query()
->joinReactionTotal('reaction_summary')
->get();
Then each Reactable model will contain reaction_summary_count & reaction_summary_weight virtual attributes.
Order by total count of reactions
$comments = Comment::query()
->joinReactionTotal()
->orderBy('reaction_total_count', 'desc')
->get();
Order by total weight of reactions
$comments = Comment::query()
->joinReactionTotal()
->orderBy('reaction_total_weight', 'desc')
->get();
Updated about 6 years ago
