Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Laravel Besucherzähler

Ich bin mir da nicht 100% sicher, aber sowas sollte man können. Es ist nicht getestet und es gibt möglicherweise einen eleganteren Weg, aber es ist ein Ausgangspunkt für Sie.

Ändern Sie die Tabelle

Ändern Sie das visit_date (datetime) Spalte in visit_date (date) und visit_time (time) Spalten, erstellen Sie dann eine id Spalte als Primärschlüssel. Stellen Sie zuletzt ip + date ein ein eindeutiger Schlüssel sein, um sicherzustellen, dass dieselbe IP nicht zweimal für einen Tag eingegeben werden kann.

Erstellen Sie ein Eloquent-Modell

Dies ist nur der Einfachheit halber:Erstellen Sie ein Eloquent-Modell für die Tabelle, damit Sie nicht ständig Fluent (Query Builder) verwenden müssen:

class Tracker extends Eloquent {

    public $attributes = [ 'hits' => 0 ];

    protected $fillable = [ 'ip', 'date' ];
    protected $table = 'table_name';

    public static function boot() {
        // Any time the instance is updated (but not created)
        static::saving( function ($tracker) {
            $tracker->visit_time = date('H:i:s');
            $tracker->hits++;
        } );
    }

    public static function hit() {
        static::firstOrCreate([
                  'ip'   => $_SERVER['REMOTE_ADDR'],
                  'date' => date('Y-m-d'),
              ])->save();
    }

}

Jetzt sollten Sie in der Lage sein, das zu tun, was Sie wollen, indem Sie einfach Folgendes aufrufen:

Tracker::hit();