附加来自模型中另一个模型的数据(laravel 5.4)

时间:2019-04-09 04:36:53

标签: php laravel-5

我想从数据库中的表中追加数据计数,但是关系方面存在问题。

我有3个型号

优惠券模型

vouchers table

VoucherSerial模型:

voucher_serials table

每个优惠券都会有很多序列号

UserVoucher模型:

user_vouchers table

当用户兑换凭证时,它将存储在user_vouchers表中。我还定义了所有模型的关系

在Voucher.php中,我想添加用户兑换的凭证的数量。

 public function  getVoucherRedeemedAttribute()
{         
   //query to append the voucher redeemed count for each voucher
}

我尝试了很多解决方案,但大多数情况下我都遇到了错误。我最大的问题是因为要根据user_vouches表对每个凭证兑换的凭证进行计数,但是每个凭证都有很多我要计为同一凭证的serial_id

我知道我对这个问题的解释不好,但是我需要一些帮助。希望有人能帮助我。

非常感谢您

1 个答案:

答案 0 :(得分:1)

您可以使用withCount方法向结果中添加相关对象的数量:

  

如果您要计算没有关系的关系的结果数   实际加载它们时,您可以使用withCount方法,该方法将   在生成的模型上放置一个{relation} _count列。例如:

$posts = App\Post::withCount('comments')->get();

foreach ($posts as $post) {
    echo $post->comments_count;
}
     

来源:https://laravel.com/docs/5.8/eloquent-relationships#counting-related-models

如果我正确理解了您的问题,则希望将计数加深一级(凭证数量而不是凭证序列号)。您也许可以使用hasManyThrough关系:

  

“具有多次通过”关系为通过中间关系访问远处的关系提供了方便的快捷方式。例如,一个国家(地区)模型可能通过一个中间用户模型具有许多邮政模型。在此示例中,您可以轻松地收集给定国家/地区的所有博客文章。

     

来源:https://laravel.com/docs/5.8/eloquent-relationships#has-many-through

结合起来,它将看起来像这样:

class User {
    //...
    public function vouchers()
    {
        return $this->hasManyThrough(App\Voucher::class, App\VoucherSerial::class);
    }
}

// Controller
$user->withCount('vouchers');

我从未真正一起使用过withCounthasManyThrough,但是应该可以使用;)