2015-04-21 15 views
5

Jestem obecnie tworzeniem aplikacji z Laravel 5, moje główne tabele są users, suppliers, manufacturers itplaravel-5 Oddzielny wzorem dla każdej tabeli dziennika

Każdy z tych tablic ma osobny users_log, suppliers_log tabeli dziennika. Celem tych tabel dziennika jest przegląd operacji wykonywanych dla pojedynczego podmiotu (, na przykład: logów należących do konkretnego producenta i zmian dokonanych w przeszłości dla tego producenta itp.,)

Mam zamiar użyć Eloquent i wygenerowałem Eloquentmodel dla każdej z głównych tabel.

moje pytanie: Czy mogę generować oddzielne Eloquent modele dla każdej z tabel dziennika lub po prostu napisać metodę jak user_log() w modelu głównego tabeli pisać mój dziennik.

P.S: Liczba użytkowników, którzy zamierzają korzystać z mojej aplikacji, jest niewielka, dlatego preferowane jest pisanie dzienników do bazy danych ponad dziennikami plików.

+0

Twoje pytanie nie jest jasne. Czy możesz wyjaśnić trochę? –

+0

Nie jestem pewien, czy istnieje odpowiednia odpowiedź "tutaj". Najlepsze, na co możemy liczyć, to znaleźć takie, które pasuje do twojej sytuacji lepiej niż inne, ale każde z nich jest do zaakceptowania. Rezultatem będzie uparta odpowiedź, która jest ogólnie nie na temat dla StackOverflow. –

+0

@NomanUrRehman: Przepraszam za bycie niejasnym. Moje pytanie powinno utworzyć nowy "wymowny model" dla tabeli 'user_log' lub po prostu użyć modelu' user' i napisać funkcję, aby wykonać operację logowania. –

Odpowiedz

3

Używałbym tylko tabeli logs, ponieważ logi powinny być proste/ogólne/proste.

Są to kolumny tabeli logs użyłbym:

  • id
  • user_id (użytkownik, który wykonał akcję jesteśmy zalogowaniem)
  • działanie (opis działania wykonywane: deleted user, updated supplier , created manufacturer, itp.)
  • Adres URL:
  • (URL używany do wykonania akcji)
  • ip (adres IP użytkownika)
  • timestamps

Mając to na uwadze, należy wtedy standardową tabelę przestawną dla każdego loggable typu tabeli, który w danym przypadku byłby log_manufacturer, log_supplier i log_user (Obserwuję konwencję nazewnictwa tabeli laravel tutaj, ale jeśli chcesz, użyj innych nazw.

W ten sposób można zrobić wyszukiwania globalnego poprzez wszelkiego rodzaju dziennika:

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

przez konkretnego typu log (użytkownik, dostawca, producent, etc):

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

lub uzyskać wszystkie specyficzne modele filtrowane przez Log:

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

aby utworzyć nowy wpis na logs tabeli, chciałbym następnie użyć Model Observers tak, aby przy każdej akcji created, updated lub deleted będzie obsługiwać tworzenie przezroczyście.

+1

Możesz również użyj relacji polimorficznej (http://laravel.com/docs/5.0/eloquent#polymorphic-relations) między modelami podstawowymi a modelem logu. – Kryten

+0

Tak, to może być inne podejście :) –