即使产品不可用,我如何能使买家仍然能够购买该产品?

问题描述 投票:0回答:2

我正在尝试创建购买产品的候补清单,但是将交易状态从“已确认”更改为“等待清单”。

为此,我在事务模型中添加了一个变量“状态”和一个函数,如下所示:

const CONFIRMED_TRANSACTION = 'confirmed';
const WAITLIST_TRANSACTION = 'waitlist'; //waitlist product

public function isConfirmed() {
        return $this->status == Transaction::CONFIRMED_TRANSACTION;
    }

Transaction的默认值->状态为'CONFIRMED_TRANSACTION'。现在,每当产品->状态更改为'不可用'时,我想在创建交易时将Transaction->状态的值更改为'WAITLIST_TRANSACTION'。

我正在尝试使用以下事件监听器来实现它:

Transaction::created(function($transaction) {
            if(!$product->isAvailable()) {
                $transaction->status = Transaction::WAITLIST_TRANSACTION;
                $transaction->save();
            }
        });

但是这给了我错误:

**ErrorException: Undefined variable: product in file /home/vagrant/restfulapi7/app/Providers/AppServiceProvider.php on line 29**

如何更好地实现相同目标?

laravel listener
2个回答
0
投票

您正在使用称为lambda或匿名函数,它与其余代码的作用域不同。

function($transaction)不能访问名为$product的变量。因此,您试图在不存在的变量上调用->isAvailable()

Transaction::created(function($transaction) {
            if(!$product->isAvailable()) {
                $transaction->status = Transaction::WAITLIST_TRANSACTION;
                $transaction->save();
            }
        });

假设它存在于您调用Transaction::created()的范围内,则可以像这样将$product变量传递到lambda函数中:

function($transaction) use ($product) { ... }

有关lambda函数的更多信息,请阅读the php docs here


0
投票

[if(!$transaction->product->isAvailable())解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.