Laravel事务 - 在创建第一个模型时将模型与其他模型相关联

时间:2015-08-22 09:59:56

标签: php laravel laravel-4 transactions eloquent

我有两个模型:UserPayout和UserTransaction,其中UserTransaction是多态的,需要知道它属于哪个模型。每当用户创建支付时,都应自动进行交易。如果在这个过程中出现问题,两者都应该回滚。

前段时间我已经问过这个问题并得到了这个答案:https://stackoverflow.com/a/32040189/1233206

今天我尝试按如下方式实现它:

# Controller

$user_payout = new UserPayout($input);
$user->payouts()->save($user_payout);

# TransactionHandler

// event: creating
public function onPayoutCreation($event)
{
    DB::beginTransaction();

    try{
        $transaction = new UserTransaction(
            array(
                'user_id' => $event->user_id,
                'value' => -$event->amount
            )
        );

        $transaction->creator()->associate($event);
        $transaction->save();
    }
    catch(\Exception $e)
    {
        DB::rollback();
        throw $e;
    }

    DB::commit();

    return true;
}

// event: creating
public function onTransactionCreation($event)
{
    $user = User::find($event->user_id);
    $user->balance = $user->balance + $event->value;

    if(!$user->save()) throw new Exception('User could not be saved. Check for validation rules.');

    return true;
}

public function subscribe($events)
{
    $events->listen('eloquent.creating: UserPayout', 'TransactionHandler@onPayoutCreation');
    $events->listen('eloquent.creating: UserTransaction', 'TransactionHandler@onTransactionCreation');
}

那么,根据链接的答案,应该设置外键。 Laravel确实将foreign_type设置为“UserPayout”,但foreign_id为NULL。

我在这里做错了什么或者不是这样简单地工作?我怎样才能实现我的目标?

我非常感谢任何帮助。

0 个答案:

没有答案