gpt4 book ai didi

php - Laravel Eloquent $model->getChanges() 在更新事件中始终为空

转载 作者:行者123 更新时间:2023-12-03 23:13:03 30 4
gpt4 key购买 nike

我正在尝试使用更新事件将所有模型更改推送到前端。我不想发送整个模型所以我找到了 hasChanges()方法。但它总是空的。

我的第一个想法是这个事件在实际保存之前触发,但是 getDirty()也是空的。然后我在调试栏中认为由于某种原因它在更新模型后立即再次检索模型(从数据库中选择)。这是正常行为还是只是创建一个新的模型对象而不是将现有的模型对象传递给事件?

事件:

class IcUpdated implements ShouldBroadcastNow
{
use Dispatchable, InteractsWithSockets, SerializesModels;

private $ic;

/**
* Create a new event instance.
*
* @return void
*/
public function __construct($ic)
{

$this->ic = $ic;
}

/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return [
new Channel('dashboard_' . ConfigHelper::getSelectedOrganizationId())
];
}

public function broadcastAs()
{
return 'ic.updated';
}

public function broadcastWith()
{
return $this->ic->getChanges();
}
}

模型:
    protected $dispatchesEvents = [
'updated' => \App\Events\IcUpdated::class,
];

那么我将如何在事件中访问和发送仅更改的字段?

最佳答案

这是由 SerializesModels 特性引起的。这会导致模型序列化为其主键,然后在执行作业时从数据库中重新获取。

这对于排队作业有延迟的情况很有用,例如,您将电子邮件排队发送给 $user。用户更改了他们的电子邮件地址,排队的作业运行但由于它从数据库重新获取用户而转到新的电子邮件地址。

在您的情况下,您绝对不想将模型序列化为其键,因为您需要存储在该特定模型实例中的属性。

关于php - Laravel Eloquent $model->getChanges() 在更新事件中始终为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55495452/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com