好的伙计们,我想改写一下我的问题。让我们看看try 2如何:)
我有一个工匠命令来计算每个用户的总收入。
用户每天都会分配收入。但是有时候,我应该如何描述它,他用其他用户的东西赚取收入。
那就是assert_user_id列。如果用户(用户2)使用来自其他用户(用户1)的内容获得收入,则应在这种情况下将这些收入添加到用户1的收入中。
id, user_id, earnings, asset_user_id
1, 1, 15, null
2, 1, 43, null
3, 1, 49, null
4, 2, 32, 1
5, 2, 25, 1
6, 2, 12, null
(在这种情况下,用户2使用来自用户1的内容几乎赚到了他所有的钱......对他来说不是很好,这就是钱的原因)
Artisan命令获取所有用户。和foreach一起经历。
在foreach中我们称之为用户模型上的方法
return $this->sum('earnings');
请记住,我在用户1的集合中。
现在我想将所有收入汇总到asset_user_id = 1。问题是,收集仅保留用户1的行。
现在的问题是:
如何从用户集合中访问所有其他行。是的,我可以做我的模型中我的函数中的User:all()。但我不认为这将是SOLID代码。那么我该如何正确地做到这一点?
答案 0 :(得分:0)
您可能想要做的是使用foreach
遍历集合并自己获取总和。
$results = Result::all();
$sum1 = 0;
$sum2 = 0;
foreach($results as $result) {
if($result->creator_id == 1 && $result->status = 'r') {
$sum1 += (int)$result->earnings;
}
if($result->asset_creator_id == 1 && $result->status = 'r') {
$sum2 += (int)$result->earnings;
}
}
sum
类中还有一个Collection
方法可能更容易一些。只需向它发送一个回调函数,它将返回您要查找的值。我们必须做两次,一次为你要找的每一笔钱。
$sum1 = $results->sum(function($result)
{
if($result->creator_id == '1' && $result->status = 'r') {
return $result->earnings;
}
});
$sum2 = $results->sum(function($result)
{
if($result->asset_creator_id == '1' && $result->status = 'r') {
return $result->earnings;
}
});
echo "Creator Earnings: ".$sum1;
echo "Asset Creator Earnings: ".$sum2;
答案 1 :(得分:0)
对数据进行排序,计数,求和将总是比使用db查询更糟糕的解决方案。
无论如何你的问题很混乱,你要求status=r
,为status=f
写总数,所以只是一个猜测,向你展示如何用Eloquent功能实现这一目标:
public function getEarningsForAssetCreator($id)
{
return $this->where('asset_creator_id', $id)
->where('status', 'f')
->sum('earnings');
}