Fungsi tidak dicetuskan apabila dikemas kini dalam model
P粉752826008
2023-08-08 16:31:55
<p>我有一个像这样的模型:</p>
<pre class="brush:php;toolbar:false;">class Peralatan memanjangkan Model
{
gunakan HasFactory,softDeletes;
dilindungi $table = 'peralatan';
dilindungi $fillable = ['station_id', 'parent_id', 'code', 'name', 'description', 'creator_id','deletor_id','updator_id'];
dilindungi $softDelete = benar;
dilindungi $dates = ['deleted_at'];
but fungsi statik awam ()
{
ibu bapa::boot();
//ia tidak memanggil sama sekali!
static::updated(function (Model $model) {
Log::error('memanggil refreshTree');
$model->refreshTree();
});
statik::dicipta(fungsi (Model $model) {
$model->refreshTree();
});
static::deleted(function (Model $model) {
$model->refreshTree();
});
}
fungsi awam refreshTree(){
Log::error('refreshTree');
$equipment = DB::table('equipments')->get();
$treeData = $this->generateTree($equipment);
$jsonData = json_encode($treeData);
Redis::set(config('redis.EquipmentTree'),$jsonData);
}
fungsi peribadi generateTree($data, $parentId = 0) {
$pokok = [];
foreach ($data sebagai $item) {
if ($item->parent_id == $parentId) {
$children = $this->generateTree($data, $item->id);
$nod = [
'id' => $item->id,
'teks' => $item->nama,
'editURL'=>route('dashboard.basic-info.equipments.edit',['id'=>$item->id]),
'kanak-kanak' => $anak-anak
];
if(count($children) <= 0)
unset($node['kanak-kanak']);
array_push($tree, $node);
}
}
pulangkan $pokok;
}
}</pre>
<p>当我创建模型时,创建函数被触发,但当我更新模型时,更新函数没有被
<pre class="brush:php;toolbar:false;">//Equipment::where('id',$id)->update(['parent_id'=>$recordTarget['id'] ]); //它没有生效
//我也尝试了这个:
$equipment = Peralatan::find($id);
$equipment->parent_id = $recordTarget['id'];
$equipment->save();</pre>
<p><br /></p>
Apabila menggunakan contoh pembangun pertanyaan atau kemas kini kelompok, pendengar acara tidak akan menyala walaupun anda hanya beroperasi pada satu baris
Untuk mencetuskannya, anda perlu menggunakan contoh model
Ini juga bersamaan dengan
Dan anda boleh melihat bahawa kemas kini panggilan() pada model adalah berbeza daripada kemas kini panggilan() pada pembina pertanyaan.
Apabila anda menganggapnya, untuk mencetuskan peristiwa ini, kod memerlukan contoh model untuk berfungsi, seperti static::updated(function (Model $model) {. Jika pertanyaan anda berbeza, seperti Equipment::where ( 'id','>',$id), untuk mengendalikan semua acara, ia perlu menanyakan semua baris yang terjejas, menjana contoh model untuknya dan kemudian menggunakan model ini untuk memanggil acara
Ini akan mengurangkan prestasi
Tetapi jika tiada cara lain, anda boleh melakukannya secara eksplisit