2017-06-14 6 views
0

Ich bin ziemlich neu mit Laravel also bitte gehen Sie einfach auf mich :) Ich versuche, die effizienteste Möglichkeit zur Generierung einer eindeutigen zufälligen ID für ein Modell zu erarbeiten. Diese ID sollte 6 Zeichen lang sein, also verwende ich mt_rand(100000,999999), um sie zu erstellen. Was ich tun möchte, ist auf die Erstellung von Modellen, generieren Sie die ID, überprüfen Sie, dass es wirklich einzigartig ist und speichern Sie es dann gegen das Modell.Generieren Sie eindeutige zufällige ID für Modell

Ich habe Beobachter beobachtet, um dies zu tun, aber es scheint ein wenig zu lange auf die Rückseite eines Schöpfungsereignisses zu gehen. Gibt es Alternativen oder eine Möglichkeit, einen Beobachter aufzurufen, ohne mehrere Dateien zu erstellen?

Chris.

Antwort

0

Ah Recht, es geschafft, dies zu arbeiten :)

Anstatt also Ereignisse mit, ich verlängert nur die Modelle Boot-Methode, da dies eine weitere Möglichkeit, Ereignisse Einhaken in Modell -

protected static function boot() { 

    // run our parent boot 
    parent::boot(); 

    // hook onto our creating method 
    static::creating(function($model) { 
     /** @var $model Candidate */ 
     $model->_generateAccessCode(); 
    }); 
} 

Diese Dann teilt es dem Modell mit, dass beim Erstellen eines neuen Ereignisses (unter Verwendung des Ereignisses creating) ein neuer Zugriffscode generiert wird.

Ich habe hinzugefügt, dann die _generateAccessCode() -Methode in das Modell -

/** 
* Called on Candidate model creation 
* @return void 
*/ 
private function _generateAccessCode() { 

    // make sure our value is unique by checking it doesn't exist already 
    while(empty($this->access_code) || self::findByAccessCode($this->access_code, ['id'])) { 
     $this->access_code = mt_rand(100000, 999999); 
    } 
} 

Welche andere Methode verweist auf einen Zugangscode zu überprüfen, existiert noch nicht -

/** 
* Retrieve a candidate by access code 
* @param int $code 6 digit access code 
* @param array $columns Array of columns 
* @return mixed 
*/ 
public static function findByAccessCode ($code, $columns = []) { 

    if(count($columns) < 1) $columns = null; 

    // get our candidate by access code 
    $candidate = Candidate::where('access_code', '=', $code)->first($columns); 

    // return our candidate 
    return $candidate; 
} 
1

Wenn Sie wirklich eindeutige IDs wollen, würde ich in UUIDs suchen, um sicherzustellen, dass Sie keine Duplikate erhalten. Ich würde empfehlen, dieses Paket zu verwenden: https://github.com/webpatser/laravel-uuid

Sie können leicht eine UUID verwenden, indem Sie dies tun: Uuid::generate(4); Dies wird sicherstellen, dass es wirklich zufällig.

+0

Prost @Templar, aber ich suche eher, wie man dies automatisch gegen ein Modell bei der Erstellung setzt, anstatt den Mechanismus zum Erstellen einer eindeutigen ID. Irgendwelche Ideen? – Chris

+0

@Chris Nein, ich bin mir nicht sicher wie, da ich vorher nicht viel mit Laravel gearbeitet habe. Mehr von einem Symfony Typ. –

Verwandte Themen