Laravel Eloquent命令与总和在哪里

时间:2017-10-25 12:51:17

标签: php laravel eloquent

我有我的桌子:

    user
       id
       name

   battles
      user1_id
      user2_id
      vote1
      vote2

   users
       id
       name

我希望通过总胜利获得用户订单,但我找不到如何使用Eloquent。

这是一个例子(这不起作用,只是为了说明):

User:orderBy(sum('battles.vote1', '>', 'battles.vote2'),'DESC')->get();

但如果投票2>它也需要工作。 vote1。

如果我有以下情况那么苛刻:

Users :
id: 1, name: John
id: 2, name: Bob
id: 3, name: Max

Battles :
user1_id : 1, user2_id : 2, vote1 : 180, vote2 : 3
user1_id : 1, user2_id : 3, vote1 : 110, vote2 : 90
user1_id : 2, user2_id : 3, vote1 : 1, vote2 : 9
user1_id : 3, user2_id : 4, vote1 : 900, vote2 : 0
user1_id : 3, user2_id : 1, vote1 : 10, vote2 : 30

我想按此顺序返回用户集合:

约翰(3胜,战斗1,2,5)

Max(2胜,对战3,4)

鲍勃(0胜)

谢谢!

1 个答案:

答案 0 :(得分:0)

请尝试使用以下请求:

获得user1方的胜利:

$wins1 = $this->user->battles->where('user1_id', $this->user->id)->sum('battles.vote1', '>', 'battles.vote2')->get();

获得user2方的胜利:

    $wins2 = $this->user->battles->where('user2_id', $this->user->id)->sum('battles.vote1', '<', 'battles.vote2')->get();

并计算双方的用户胜利:

 $total = $wins1 + $wins2;