我正在尝试创建购买产品的候补清单,但是将交易状态从“已确认”更改为“等待清单”。
为此,我在事务模型中添加了一个变量“状态”和一个函数,如下所示:
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**
如何更好地实现相同目标?
您正在使用称为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
[if(!$transaction->product->isAvailable())
解决了这个问题。