Laravel大规模改变雄辩

时间:2018-02-21 18:01:55

标签: php mysql laravel eloquent

我有SELECT * FROM category WHERE name LIKE 'Your_Name' userspromocodes表格。模型:users_promocodesUserPromocode

它们是UserPromocode表的关键:users_promocodes - > user_idusers.id - > promocode_id

当我从基地删除promocode时,我需要带走promocode奖金。 如何为具有promocodes.id的用户提供Eloquent users.bonususers.bonus - 5)值?

1 个答案:

答案 0 :(得分:3)

我会使用Model Observers来跟踪这些变化。

删除PromoCodes后,您可以查询users表并根据需要进行更新:

<?php

namespace App\Observers;

class PromoCodeObserver
{
    /**
     * Listen to the PromoCode Deleting event.
     *
     * @param  PromoCode $promoCode
     * @return void
     */
    public function deleting(PromoCode $promoCode)
    {
        // search for all users associated with the promo code
        // update the bonus and save changes
        $promoCode->users->each(function (User $user) { 
            $user->update(['bonus' => $user->bonus - 5]);
        });
    }
}

// User.php
public function promocode()
{
    return $this->belongsTo(PromoCode::class);
}

// PromoCode.php
public function users()
{
    return $this->hasMany(User::class);
}

假设用户只能拥有一个PromoCode,则需要上述一对多关系,如果是这种情况,只需在promo_code_id上添加users字段。