Laravel - Eloquent - 获取相关模型特定列的总和

6
假设我有一个表orders,其中包含字段id、userId、amount和description,还有一个表user,它有各种各样的字段。如果我想获取所有用户(及其所有字段)以及与该用户相关的订单的“amount”列的总和,该怎么办?
假设我有: user:{id:15,firstName:jim,lastName:morrison,gender:male}
order:{id:1,userId:15,amount:10,description:"order xxx"}, order:{id:3,userId:15,amount:40,description:"order yyy"}
我想要收到: user:{id:15,firstName:jim,lastName:morrison,gender:male,orderAmount:50}
当然,我想避免使用foreach语句。
我已在我的user模型上设置了这个。
public function userOrder (){
    return $this->hasMany('Order', 'userId');
}

我尝试过这个:

return $this->hasMany('Order', 'userId')->sum('amount');

一直都没有成功...

1个回答

8

以下是一些想法和希望回答您的问题:

我会将用户表格重命名为“users”,以符合 Laravel 的约定。 http://laravel.com/docs/4.2/eloquent#basic-usage

我会在用户模型中将该方法命名为“orders”。

public function orders()
{
    return $this->hasMany('Order', 'userId');
}

查询用户、他的订单,然后汇总他的订单金额值:

$userdata = User::with( 'orders' )->where( 'userId', 15 )->first();
$sum = $userdata[ 'orders' ]->sum( 'amount' );

谢谢您的回复。我在定义我的表时非常模糊......当然它被称为“users”,我的模型被称为“User”,但我担心您提供的解决方案并不是我正在寻找的...请看一下这个链接:http://stackoverflow.com/questions/25655388/get-max-value-for-each-related-model-with-eloquent-in-laravel,看看Jarek Tkaczyk如何使用“latest()”函数解决了我的问题...我正在寻找类似的东西。 - ciccioassenza
啊哦...我在你的问题中没有看到这个,但是嘿,我很高兴你找到了解决方案 :-) - Kristo
抱歉,我的英语很糟糕,我有困难解释问题...我发布的链接与另一个问题有关,我想指出的是用那个解决方案如何仅获取那些相关的最后一条消息,而无需使用foreach。问题仍然存在:( - ciccioassenza
刚刚发现在Blade模板中甚至可以在循环中使用sum函数。因此,如果您有许多订单,您可以使用@foreach($users as $user) {{$user->orders->sum('amount')}} @endforeach - Raja Amer Khan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接