2015-04-21 18 views
5

Tôi hiện đang phát triển một ứng dụng với Laravel 5, bảng chính của tôi là users, suppliers, manufacturers, vvLaravel-5 mô hình riêng biệt cho mỗi bảng log

Mỗi bảng có một bảng ghi riêng users_log, suppliers_log. Mục đích của các bảng nhật ký này là xem lại các hoạt động được thực hiện cho một thực thể duy nhất (ví dụ: nhật ký thuộc về một nhà sản xuất cụ thể và các thay đổi được thực hiện trong quá khứ đối với nhà sản xuất đó, v.v.)

Tôi định sử dụng Eloquent và tôi đã tạo một Eloquentmodel cho mỗi bảng chính.

My Câu hỏi: Tôi có nên tạo Eloquent mô hình riêng biệt cho mỗi người trong số các bảng đăng nhập hoặc chỉ cần viết một phương pháp như user_log() trong mô hình của bảng lớn ghi log của tôi.

P.S: Số lượng người dùng sẽ sử dụng ứng dụng của tôi rất ít, do đó việc ghi nhật ký vào cơ sở dữ liệu được ưu tiên hơn nhật ký tệp.

+0

Câu hỏi của bạn không rõ ràng. Bạn có thể giải thích một chút không? –

+0

Tôi không chắc có câu trả lời "đúng" ở đây. Điều tốt nhất chúng ta có thể hy vọng là tìm ra cái phù hợp với hoàn cảnh của bạn hơn cái khác, nhưng cách tiếp cận là chấp nhận được. Kết quả sẽ là một câu trả lời có ý kiến, thường không có chủ đề cho StackOverflow. –

+0

@NomanUrRehman: Tôi xin lỗi vì không rõ ràng. Câu hỏi của tôi là tôi nên tạo mới 'mô hình eloquent' cho bảng' user_log' hoặc chỉ sử dụng mô hình 'user' và viết một hàm để thực hiện thao tác ghi nhật ký. –

Trả lời

3

Tôi sẽ chỉ sử dụng bảng logs, vì nhật ký phải đơn giản/chung/đơn giản.

Đây là những cột bảng logs Tôi sẽ sử dụng:

  • id
  • user_id (người dùng mà thực hiện các hành động chúng tôi đang đăng nhập)
  • hành động (mô tả về hành động thực hiện: deleted user, updated supplier , created manufacturer, v.v.)
  • url (URL được sử dụng để thực hiện tác vụ)
  • ip (địa chỉ IP của người dùng)
  • timestamps

Với ý nghĩ đó, sau đó bạn sẽ có một bảng pivot tiêu chuẩn đối với từng loại bảng có thể ghi nào, mà trong trường hợp của bạn sẽ là log_manufacturer, log_supplierlog_user (Tôi đang theo quy ước đặt tên Laravel bảng ở đây, nhưng hãy tiếp tục và sử dụng các tên khác nếu bạn muốn).

Bằng cách này bạn có thể thực hiện tìm kiếm toàn cầu bằng bất kỳ loại nhật ký:

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

theo loại cụ thể log (người sử dụng, nhà cung cấp, nhà sản xuất, vv):

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

hoặc nhận được tất cả cụ thể mô hình được lọc bởi Log:

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

Để tạo mục nhập mới trên logs bảng, sau đó tôi sẽ sử dụng Model Observers để tại mỗi hành động created, updated hoặc deleted nó sẽ xử lý việc tạo minh bạch.

+1

Bạn cũng có thể sử dụng [mối quan hệ đa hình] (http://laravel.com/docs/5.0/eloquent#polymorphic-relations) giữa các mô hình chính và mô hình nhật ký. – Kryten

+0

Vâng, đó có thể là một cách tiếp cận khác :) –

Các vấn đề liên quan