모델 내부에서 업데이트되면 기능이 트리거되지 않습니다.
P粉752826008
P粉752826008 2023-08-08 16:31:55
0
1
437
<p>내가 가지고 있는 이미지는 다음과 같습니다.</p> <pre class="brush:php;toolbar:false;">class Equipment 확장 모델 { HasFactory,softDeletes를 사용합니다. 보호된 $table = '장비'; protected $fillable = ['station_id', 'parent_id', 'code', 'name', 'description', 'creator_id','deletor_id','updator_id']; 보호된 $softDelete = true; 보호된 $dates = ['deleted_at']; 공개 정적 함수 boot() { 부모::부팅(); // 전혀 호출되지 않습니다! static::updated(함수 (모델 $model) { Log::error('refreshTree 호출 중'); $model->refreshTree(); }); static::created(함수 (모델 $model) { $model->refreshTree(); }); static::deleted(함수 (모델 $model) { $model->refreshTree(); }); } 공개 함수 새로 고침 트리(){ 로그::error('refreshTree'); $equipment = DB::table('장비')->get(); $treeData = $this->generateTree($equipment); $jsonData = json_encode($treeData); Redis::set(config('redis.EquipmentTree'),$jsonData); } 개인 함수 generateTree($data, $parentId = 0) { $트리 = []; foreach($data를 $item으로) { if ($item->parent_id == $parentId) { $children = $this->generateTree($data, $item->id); $노드 = [ 'ID' => $item->id, '텍스트' => $item->이름, 'editURL'=>route('dashboard.basic-info.equipments.edit',['id'=>$item->id]), '아이들' => $children ]; if(count($children) <= 0) unset($node['children']); array_push($tree, $node); } } $tree를 반환합니다. } }</pre> <p>当我创建模型时,创建函数被触发,但当我更新模型时,更新函数没有被触发</p> <pre class="brush:php;toolbar:false;">//Equipment::where('id',$id)->update(['parent_id'=>$recordTarget['id'] ]); //它没有生效 //저는 也尝试了这个: $equipment = 장비::find($id); $equipment->parent_id = $recordTarget['id']; $equipment->save();</pre> <p><br /></p>
P粉752826008
P粉752826008

모든 응답(1)
P粉165522886

쿼리 빌더 인스턴스 또는 일괄 업데이트를 사용할 때 한 행만 작업하더라도 이벤트 리스너가 실행되지 않습니다

으아아아

트리거하려면 모델 인스턴스를 사용해야 합니다

으아아아

이것은

와도 동일합니다. 으아아아

그리고 모델에서 update()를 호출하는 것이 쿼리 빌더에서 update()를 호출하는 것과 다르다는 것을 알 수 있습니다.

이를 고려하면 이러한 이벤트를 트리거하려면 코드에 static::updated(function (Model $model) {와 같이 작업할 모델의 인스턴스가 필요합니다. Equipment::where( 'id','>',$id), 모든 이벤트를 처리하려면 영향을 받는 모든 행을 쿼리하고 이에 대한 모델 인스턴스를 생성한 다음 이러한 모델을 사용하여 이벤트를 호출해야 합니다.

이렇게 하면 성능이 저하됩니다

하지만 다른 방법이 없다면 명시적으로 할 수 있습니다

으아아아
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!