如何解决尝试从foreach中求和,但只返回一个值
$ surrender的每个实例都有多个功能,每个功能都有不同的稀有度 我想根据合并后的总数来计算
以下是我的代码
$features = $surrender->character->image->features()->get();
foreach($features as $traits) {
$rarity = Rarity::where('id',$traits->rarity_id)->first();
switch($rarity->name) {
// e.g if the rarity name returns rare,the cost is 100
case 'rare':
$cost = 100;
break;
}};
$totalcost = collect($cost)->sum();
}
else $totalcost = NULL;
但是,例如当我具有稀有性“ rare”的两个功能时,它仅返回100。
解决方法
您在每个循环中都辅助使用相同的值:
name: Build production container
on:
release:
types:
- created
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Build the Docker image
run: |
echo "${{ SECRET }}" | docker login -u ME --password-stdin docker.pkg.github.com
docker build app/ -t docker.pkg.github.com/REPO_PATH/image:$VERSION
docker push docker.pkg.github.com/REPO_PATH/image:$VERSION
shell: bash
env:
VERSION: 0.0.1
要获取摘要,您可以简单地累积费用:
$cost = 100;
将其应用于您的代码段:
$cost += 100;
,
问题已经有选定的答案。
如果有人对重构代码感兴趣,请使用laravel collection
方法。
$totalCost = $surrender->character->image->features->sum(function($feature) {
return Rarity::where('id',$traits->rarity_id)->where('name','rare')->exists() ? 100 : 0;
});
提高效率
前一种方法的问题在于,要获取每个rare
的{{1}},将有多个数据库调用。为避免这种情况,我们可以急于加载feature
。
在rare
模型中定义rarity()
关系
Feature
现在在控制器中
public function rarity()
{
return $this->bgelongsTo(Rarity::class);
}
另一种方法
我假设您只想总结“稀有特征”的稀有性。然后,仅获取罕见的功能。
$features = $surrender->character->image->features()->with('rarity')->get();
$totalCost = $features->sum(function($feature) {
return $feature->rarity->name == 'rare' ? 100 : 0;
});
另一种方法
似乎我们甚至不想获取“稀有特征”。我们只需要计数“稀有特征”即可。
$rarefeatures = $surrender->character->image->features()
->whereHas('rarity',function($query) {
return $query->name('name','rare');
})->get();
$totalCost = $rareFeatures->sum(function($feature) {
return 100;
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。