我正在构建一个使用纤细,细长和雄辩的应用程序。在我的一个页面上,我显示一组项目首先分成两组,然后进一步按类别拆分。每个项目都有一个重量。我输出了第一次拆分中所有物品的总重量。我从第二次拆分中输出一次每个类别的名称。现在,我想获得该类别中项目的总重量,并将其列在该类别名称下。
这是来自路线:
$userId = $app->auth->id;
$collection = collect($app->item->where('user_id', $userId)->get()); // All items from the current user
$totalWeight = $collection->sum('grams');
$pack = $collection->filter(function($gear) { // All items with status 1 from the current user
if ($gear->status === 1) {
return true;
}
})->sortBy('category');
$storage = $collection->filter(function($gear) { // All items with status 0 from the current user
if ($gear->status === 0) {
return true;
}
})->sortBy('category');
$app->render('user/gear.php', [
'pack' => $pack,
'storage' => $storage,
'totalWeight' => $totalWeight
]);
这是从以下观点来看:
<div class="pack">
<header class="pack__header">
<h2 class="pack__header__title">Backpack</h2>
<span class="pack__header__weight">Total Weight: {{ totalWeight|outputWeights(totalWeight) }}</span>
</header>
{% set currentCategory = null %}
{% for item in pack %}
{% if item.category != currentCategory %}
<h3 class="categoryName">{{ item.category|getCatName(item.category) }}</h3>
{% set currentCategory = item.category %}
{% endif %}
<div class="item">
<ul class="item__lineOne">
<input type="checkbox" form="itemCheck" name="ID of the item" value="selected">
<li class="item__lineOne__name">{{ item.name }}</li>
<li class="item__lineOne__weight">{{ item.grams }}</li>
</ul>
<div class="collapse">
<ul class="item__lineTwo">
<li class="item__lineTwo__description">{{ item.description }}</li>
</ul>
<ul class="item__lineThree">
<li class="item__lineThree__url">
<a class="item__lineThree__url__link" href="{{ item.url }}">{{ item.url }}</a>
</li>
</ul>
<button type="button" class="modifyItemButton">Modify</button>
</div>
</div>
{% endfor %}
</div>
如果我需要在视图中的foreach中使用一些代码,我还有一个带有一些Twig_SimpleFilters的文件。我不知道在哪里或什么是解决这个问题的有效方法。
答案 0 :(得分:1)
您可以简化收集方法:
SELECT USERID, sum_score,
@rownum := @rownum + 1 AS UserRank
FROM (
SELECT USERID, SUM(SCORE) AS sum_score
FROM RESPOSTAS
GROUP BY USERID ) AS t
CROSS JOIN (SELECT @rownum := 0) AS v
ORDER BY sum_score DESC
而不是过滤器。
您不需要sortyBy,而是使用$pack = $collection->where('status', 1)->sortBy('category');
:
groupBy
然后在模板中为每个类别使用$pack = $collection->where('status', 1)->groupBy('category');
:
sum