laravel - 如何在 laravel/octobercms 和 twig 中按 Id 显示星级?
问题描述
我有这个查询来显示评级,它工作正常
$ads = Advert::find(151);
$this['userAverageRating'] = $ads->ratings()->avg('rating');
在树枝上显示它我也有这个
<div align="left" style="font-size: 12px;">
{% if userAverageRating %}
{% for i in range(1,5) %}
{% if userAverageRating >= max(0, i-0.25) %}
<span style="color: orange" class="fa fa-star"></span>
{% elseif (userAverageRating > (i-0.75)) %}
<span style="color: orange" class="fa fa-star-half-o"></span>
{% else %}
<span style="color: orange" class="fa fa-star-o"></span>
{% endif %}
{% endfor %}
<span><b>{{ userAverageRating|round(1, 'floor') }}/5</b></span>
{% else %}
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span style="font-size: 12px"><b></b></span>
{% endif %}
</div>
上面的 twig 标签在 twig foreach 中
{% for ad in ads %}
{{ ad.title }}
{{ ad.description }}
...
//the above twig tag here
{% endfor %}
我的主要问题是广告 ID“151”的评级显示在所有广告 foreach 结果中,而不仅仅是 ID 为 151 的广告。任何想法为什么会这样以及如何解决它
解决方案
解决这个问题的两种方法,我认为第一种方法更优雅。需要注意的一些事情是我在猜测如何使用您的模型。所以你可能需要调整if ($ad->ratings()->first)
我假设如果那里没有东西,它将返回 null 。第二种方法现在更接近您的逻辑,但您需要添加 id(或独特的东西),以便您可以使用 twig 来检查 .id 之类的 id {% if userAverageRating and ad.id == userAverageRating.id %}
。
1:Foreach 并修改每个广告的集合以平均评分。
$ads = Advert::all();
foreach ($ads as $ad) {
if ($ad->ratings()->first) {
$ad->averageRating = $ad->ratings()->avg('rating');
}
else {
$ad->averageRating = null;
}
}
$this['ads'] = $ads;
//Twig Script
{% if ad.averageRating %}
{% for i in range(1,5) %}
{% if ad.averageRating >= max(0, i-0.25) %}
<span style="color: orange" class="fa fa-star"></span>
{% elseif (ad.averageRating > (i-0.75)) %}
<span style="color: orange" class="fa fa-star-half-o"></span>
{% else %}
<span style="color: orange" class="fa fa-star-o"></span>
{% endif %}
{% endfor %}
<span><b>{{ ad.averageRating|round(1, 'floor') }}/5</b></span>
{% else %}
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span style="font-size: 12px"><b></b></span>
{% endif %}
2:收集带有广告 ID 的数组中的评级。
$ads = Advert::all();
$ratings = [];
foreach ($ads as $key => $ad) {
if ($ad->ratings()->first) {
$ratings[$key] = [ 'id' = $ad->id, 'rating' = $ad->ratings()->avg('rating') ];
}
else {
$ratings[$key] = null;
}
}
$this['userAverageRating'] = $ratings;
//Twig Script
{% if userAverageRating and ad.id == userAverageRating.id %}
{% for i in range(1,5) %}
{% if userAverageRating >= max(0, i-0.25) %}
<span style="color: orange" class="fa fa-star"></span>
{% elseif (userAverageRating > (i-0.75)) %}
<span style="color: orange" class="fa fa-star-half-o"></span>
{% else %}
<span style="color: orange" class="fa fa-star-o"></span>
{% endif %}
{% endfor %}
<span><b>{{ userAverageRating|round(1, 'floor') }}/5</b></span>
{% else %}
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span class="fa fa-star-o"></span>
<span style="font-size: 12px"><b></b></span>
{% endif %}
推荐阅读
- java - 如何模拟带有参数和字符串返回类型的静态方法?
- linux - 我可以通过文件名推断库的版本吗?
- android - React Native 应用程序在应用程序发布 apk 中崩溃
- c# - 如何遍历每个 Entity Framework Core 对象的相关实体?
- regex - NGINX 位置块正则表达式和代理通行证
- sql - 防止 SQL 应用程序中的重复条目
- r - 如何生成随机数直到差的总和为 3000?
- flutter - 我如何调用,不同语言环境的不同字体 - 使用按钮
- html - 为什么下划线在深色模式下不显示?
- javascript - GSAP 时间线中的 Swiper 动画,同时开始