2015-04-21 14 views
5

Attualmente sto sviluppando un'applicazione con Laravel 5, le mie tabelle principali sono users, suppliers, manufacturers ecclaravel-5 modello separato per ogni tabella di log

Ognuna di queste tabelle ha un separato users_log, suppliers_log tabella di log. Lo scopo di queste tabelle di registro è quello di rivedere le operazioni eseguite per una singola entità (ad esempio: ceppi appartenenti a un determinato produttore e le modifiche apportate in passato per quel produttore, ecc,)

Ho in programma di utilizzare Eloquent e ho generato uno Eloquentmodel per ciascuna delle tabelle principali.

mia domanda: Dovrei generare Eloquent modelli separati per ciascuna delle tabelle del log o semplicemente scrivere un metodo come user_log() nel modello della tabella maggiore di scrivere il mio registro.

P.S: il numero di utenti che utilizzano la mia applicazione sono pochi, pertanto la scrittura di registri su un database è preferibile rispetto ai registri di file.

+0

La tua domanda non è chiara. Puoi spiegare un po '? –

+0

Non sono sicuro che ci sia una risposta "giusta" qui. Il meglio che possiamo sperare è trovarne uno che si adatti alla tua situazione meglio di un altro, ma entrambi gli approcci sono accettabili. Il risultato sarà una risposta motivata, che è generalmente fuori tema per StackOverflow. –

+0

@NomanUrRehman: Mi scuso per non essere chiaro. La mia domanda dovrebbe creare un nuovo 'modello eloquente' per la tabella' user_log' o semplicemente usare il modello 'user' e scrivere una funzione per fare l'operazione di logging. –

risposta

3

Vorrei usare solo una tabella logs, perché i registri dovrebbero essere qualcosa di semplice/generico/semplice.

Queste sono le colonne della tabella logs userei:

  • id
  • id_utente (Utente che ha eseguito l'azione che stiamo accedendo)
  • azione (descrizione dell'azione svolta: deleted user, updated supplier , created manufacturer, ecc.
  • url (l'URL utilizzato per eseguire l'azione)
  • ip (indirizzo IP dell'utente)
  • timestamp

Con questo in mente, si dovrebbe quindi avere una tabella pivot standard per ogni tipo di tabella loggable, che nel tuo caso sarebbe log_manufacturer, log_supplier e log_user (Sto seguendo la convenzione tavolo laravel denominazione qui, ma vai avanti e usa altri nomi se lo desideri).

questo modo si può fare una ricerca globale da qualsiasi tipo di registro:

$logs = Log::where('user_id', 1)->get(); // get all logs of User 1 

da specifici tipo di registro (utente, fornitore, produttore, ecc):

$logs = Log::has('suppliers') 
      ->where('user_id', 1) 
      ->get(); // get Supplier logs created by User 1 

o ottenere tutte specifica modelli filtrati da un Log:

$manufacturers = Manufacturer::whereHas('logs', function ($query) 
{ 
    $query->where('user_id', 1); 
}) 
->get(); // get all Manufacturers that have been manipulated by User 1 

al fine di creare una nuova voce sulla 012 Tabella, vorrei quindi utilizzare Model Observers in modo che ad ogni azione created, updated o deleted gestisse la creazione in modo trasparente.

+1

Si potrebbe anche usa una [relazione polimorfica] (http://laravel.com/docs/5.0/eloquent#polymorphic-relations) tra i modelli primari e il modello di log. – Kryten

+0

Sì, potrebbe essere un altro approccio :) –

Problemi correlati