Ich benutze ActivityLog für die Protokollierung der Aktivitäten meines Benutzers in Laravel. Dieses Paket funktioniert wirklich gut beim Speichern aller create
, update
und delete
Aktivitäten, die vom Benutzer auf verschiedenen Modellen durchgeführt werden, die ich mit diesem Paket eingerichtet habe.Suche nach benutzerdefinierten Eigenschaften von Spatia Aktivitätsprotokoll in Laravel
Aber es gibt ein Problem, dem ich jetzt gegenüberstehe. Ich habe den ActivityLog
Tisch wie unten-
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}
Ich brauche die Ergebnisse dieser Tabelle durch project_id
in der properties
Spalte gespeichert gefiltert zu erhalten. Die Paketdokumentation sagt, dass Activity
eine normale Eloquent Model
ist, so dass wir alle Eloquent
bereitgestellten Standardfunktionen verwenden können, um mit dem Activity
Modell zu verwenden. Aber ich bin nicht sicher, wie man das mit Eloquent
macht.
Gerade jetzt, ich bin, dies zu erreichen durch den Code unten-
$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);
});
Das Problem mit meinem obigen Code ist, dass sie alle Aktivitäten bis heute angemeldet holen, so dass ihr Laden all Activity
Modelle, die vorhanden ist, und dann filtert durch basierend auf der project_id
. Dies wird einige Zeit dauern, wenn die Größe der ActivityLog
mit einer Erhöhung auf eine große Anzahl, sagen wir 100.000 Zeilen. Kennt jemand eine bessere Methode zum Abrufen der gefilterten Ergebnisse basierend auf project_id
, ohne manuell alle Zeilen zu durchlaufen?