Heim  >  Artikel  >  Backend-Entwicklung  >  Verwendung des Seeder des Laravel-Frameworks zur Implementierung der automatischen Datenfüllfunktion

Verwendung des Seeder des Laravel-Frameworks zur Implementierung der automatischen Datenfüllfunktion

不言
不言Original
2018-06-13 09:26:501923Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung von Seeder durch das Laravel-Framework zur Realisierung der automatischen Datenfüllfunktion vorgestellt. Er analysiert die zugehörigen Bedienfähigkeiten und Vorsichtsmaßnahmen für das automatische Füllen von Daten anhand der Seeder-Klasse in Form von Beispielen siehe es

Das Beispiel in diesem Artikel beschreibt, wie das Laravel-Framework Seeder verwendet, um die automatische Datenfüllfunktion zu implementieren. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Laravel verwendet die Seeder-Klasse, um Daten automatisch auszufüllen

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
  /**
   * Run the database seeds.
   */
  public function run()
  {
    //
  }
}
class MyTableSeeder extends Seeder
{
  public function run()
  {
    //
  }
}

Ihr angepasster Seeder hat nur eine Ausführungsfunktion, in die Sie schreiben Ihre automatischen Füllschritte

Sie werden diese beiden Funktionen bemerken

Model::unguard();
//你的填充操作
Model::reguard();

Wofür werden sie verwendet? Ich kann nur spekulieren, dass es sich um ein Paar handelt Funktionen, die gegeneinander reagieren. Also habe ich den Quellcode überprüft.

Diese beiden Funktionen sind unter Model.php im Verzeichnis vendorlaravelframeworksrcIlluminateDatabaseEloquent

/**
* Disable all mass assignable restrictions.
*
* @param bool $state
* @return void
*/
public static function unguard($state = true)
{
    static::$unguarded = $state;
}
/**
* Enable the mass assignment restrictions.
*
* @return void
*/
public static function reguard()
{
    static::$unguarded = false;
}

definiert. Wenn Sie sich die Kommentare des Laravel-Autors ansehen, können Sie erkennen, dass es sich um Operationen handelt, die eingeschränkt werden müssen Datenfüllung.

Unguard ist also vorne und Reguard ist für die Aufhebung der Einschränkungen für den automatischen Füllvorgang verantwortlich, und Reguard ist für die Wiederherstellung der Einschränkungen verantwortlich.

Bevor Sie den Vorgang ausfüllen, wird empfohlen, die Mitgliedsfunktion des Modells zu verwenden.

Model::truncate();

Diese Funktion löscht die Datentabelle, die dem Modell entspricht. Verwenden Sie sie daher bitte mit Vorsicht.

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
  /**
   * Run the database seeds.
   */
  public function run()
  {
    Model::unguard();
    $this->call(&#39;PostTableSeeder&#39;);
    Model::reguard();
  }
}
class PostTableSeeder extends Seeder
{
  public function run()
  {
    App\Post::truncate();
    factory(App\Post::class, 1000)->create();
  }
}

Einige Leser hier fragen sich vielleicht: Warum schreiben wir nicht alle Füllvorgänge in die Ausführungsfunktion des integrierten DatabaseSeeder?

Denn wenn wir ein komplettes System entwickeln, müssen möglicherweise viele Datentabellen ausgefüllt werden, und wir möchten die Ausführungsfunktion nicht jedes Mal stark ändern müssen. Wir möchten auch den Füllvorgang bei jedem Füllvorgang beibehalten, daher schreiben wir lieber eine neue Klasse und rufen sie dann mit der Funktion $this->call() auf.

Als nächstes sprechen wir über die Fabrik.

DateiverzeichnisdatabasefactoriesModelFactory.php

$factory->define(App\Post::class, function ($faker) {
  return [
    &#39;title&#39; => $faker->sentence(mt_rand(3, 10)),
    &#39;content&#39; => join("\n\n", $faker->paragraphs(mt_rand(3, 6))),
    &#39;published_at&#39; => $faker->dateTimeBetween(&#39;-1 month&#39;, &#39;+3 days&#39;),
  ];
});

Obwohl ich es verstehen kann, weiß ich nicht, was die $factory-Variable ist? Überprüfen Sie also die Factory-Klasse, um sie zu finden.

Suchen Sie den Quellcode

/**
* Define a class with a given set of attributes.
*
* @param string $class
* @param callable $attributes
* @param string $name
* @return void
*/
public function define($class, callable $attributes, $name = &#39;default&#39;)
{
    $this->definitions[$class][$name] = $attributes;
}
/**
* Create an instance of the given model and persist it to the database.
*
* @param string $class
* @param array $attributes
* @return mixed
*/
public function create($class, array $attributes = [])
{
    return $this->of($class)->create($attributes);
}
in Factory.php im Verzeichnis

vendorlaravelframeworksrcIlluminateDatabaseEloquent

, um mit dem Ausfüllen der Daten zu beginnen. Wir verwenden weiterhin die handwerkliche Befehlszeile

php artisan db:seed

Dieser Befehl wird ausgeführt. Sie schreiben die Ausführungsfunktionen aller Klassen in DatabaseSeeder.php. Wenn das Projekt in Zukunft kompliziert wird, müssen die bereits ausgeführten nicht ausgeführt werden. Fügen Sie daher Parameter nach der Befehlszeile hinzu und führen Sie einfach die Ausführungsfunktion einer bestimmten Klasse aus

rrree

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Studium aller hilfreich sein. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website !

Verwandte Empfehlungen:

Über die Bindungsoperationen von Laravel-Framework-Routen und -Controllern

Für den Lebenszyklus des Laravel-Frameworks Analyse der Prinzipien

Routing-Einstellungen des Laravel-Frameworks

Das obige ist der detaillierte Inhalt vonVerwendung des Seeder des Laravel-Frameworks zur Implementierung der automatischen Datenfüllfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn