Fungsi tidak dicetuskan apabila dikemas kini dalam model
P粉752826008
P粉752826008 2023-08-08 16:31:55
0
1
474
<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>
P粉752826008
P粉752826008

membalas semua(1)
P粉165522886

Apabila menggunakan contoh pembangun pertanyaan atau kemas kini kelompok, pendengar acara tidak akan menyala walaupun anda hanya beroperasi pada satu baris

Equipment::where('id',$id) //right here you get a Builder instance
    ->update([]); //will not trigger the event listener as it is a mass update

Untuk mencetuskannya, anda perlu menggunakan contoh model

Equipment::where('id',$id)->first() //This returns a model instance
    ->update([]); //will trigger the event listener as it is a single instance update

Ini juga bersamaan dengan

$equipment = Equipment::find($id);
$equipment->parent_id = ..;
$equipment->save();

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

$equipments = Equipment::where('id','>',$id)->get();
foreach ($equipments as $equipment) {
    $equipment->update(['parent_id'=>$recordTarget['id']]);
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!