나는 Laravel에서 내 사용자의 활동을 기록하는 데 ActivityLog을 사용하고 있습니다. 이 패키지는 내가이 패키지로 설정 한 다양한 모델에 대해 사용자가 수행 한 모든 create
, update
및 delete
활동을 저장하는 데 아주 효과적입니다.laravel의 Spatie Activity-log의 사용자 지정 속성으로 검색
하지만 지금 직면 한 한 가지 문제가 있습니다. 나는 below-
id | log_name | description | subject_id | subject_type | causer_id | causer_type | properties
----------------------------------------------------------------------------------------------------------------------------------------
7 | default | created | 4 | App\Response | 1 | App\User |{"project_id":"22295","feature_id":"2","part_id":"1","response":"yes","user_id":1}
같은 ActivityLog
테이블 내가 properties
컬럼에 저장 project_id
에 의해 필터링이 테이블의 결과를 얻을 필요가있다. 패키지 설명서에 따르면 Activity
은 보통 Eloquent Model
이며 Eloquent
은 Activity
모델과 함께 기본 기능을 제공합니다. 하지만 Eloquent
으로 어떻게해야할지 모르겠습니다. 지금
, 내가
$activities = Activity::latest()->get()->filter(function($item) use($projectId) {
$properties = $item->properties->toArray();
if(isset($properties['attributes']))
$properties = $properties['attributes'];
return ($properties['project_id'] == $projectId);
});
내 위의 코드의 문제 below- 코드에 의해이를 달성하고 그것을, 날짜까지 기록 된 모든 활동을 반입하는 자사의 로딩 때문에 존재하는 모든 Activity
모델과 project_id
을 기준으로 필터링합니다. 이것은 ActivityLog
의 크기가 커지면 많은 시간이 걸릴 것입니다. 예를 들어 100,000 개의 행이 있습니다. 누구든지 수동으로 모든 행을 거치지 않고 project_id
을 기반으로 필터링 된 결과를 가져 오는 더 나은 방법을 알고 있습니까?