當模型在系統中的任何地方更新時,是否有可能在UpdateRateZone全球范圍內運行這項作業Consignment?
一種方法是使用Observer,但觀察者在一次更新多個記錄時不起作用,例如
Consignment::where('status',1)->update(['address'=>'This']);
我們還有什么可以做的嗎?
uj5u.com熱心網友回復:
是的,您可以為您的模型創建一個事件偵聽器。您可以在此處閱讀更多資訊
簡而言之,首先您需要為所需的模型創建一個事件,所以如果它是一個更新的事件,請創建這樣的東西。
php artisan make:event Consignment/Updated
在該檔案中添加
class Updated
{
use Dispatchable, InteractsWithSockets, SerializesModels;
/**
* @var Consignment
*/
public $consignment;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Consignment $consignment)
{
$this->consignment= $consignment;
}
/**
* Get the event consignment property
*
* @return Consignment
*/
public function getConsignment()
{
return $this->consignment;
}
}
現在您必須為此事件創建一個偵聽器
php artisan make:listener Consignment/UpdatedEvent
并在句柄函式中添加你的邏輯
/**
* Handle the event.
*
* @param Updated $event
* @return void
*/
public function handle(Updated $event)
{
//
}
之后剩下的就是為您注冊事件模型,然后在您添加的 Consignment.php 類中執行此操作
/**
* The event map for the category.
*
* @var array
*/
protected $dispatchesEvents = [
'updated' => Updated::class,
];
uj5u.com熱心網友回復:
根據 laravel 檔案:
通過 Eloquent 發布批量更新時,不會為更新的模型觸發保存、保存、更新和更新模型事件。這是因為在發布大規模更新時從未真正檢索到模型。
Laravel 在大規模更新的情況下不會觸發updated事件,因此據我所知這是不可能的。另一種方法是手動進行。
除了使用事件閉包和手動注冊事件observers等方法之外,所有這些方法都可以在僅觸發事件時起作用。laravelmass updation
uj5u.com熱心網友回復:
當你這樣做時:
Model::where('status',1)->update([some stuff]);
Query Builder 的 update() 方法被執行,而不是 Eloquent 的 update() 方法。
如果要觸發 Eloquent 事件,則需要逐行更新。您可以手動觸發這些事件,但這很棘手,而且是個壞主意。
您可以UpdateRateZone為所有已更新的寄售手動運行作業
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/468981.html
上一篇:laraveleloquent中保存、填充、創建的區別
下一篇:CSS3-RotateY()居中
