Wie übergibt man Argumente an Laravel-Fabriken?

8

Ich habe eine users -Tabelle und eine Eins-zu-Null / Eins-Beziehung mit einer businesses -Tabelle (users.user_id = & gt; businesses.user_id). Auf meiner users -Tabelle habe ich einen Diskriminator, der mir sagt, ob der Benutzer vom Typ Geschäft ist und deshalb muss ich auch Details zur Tabelle businesses haben.

Ich möchte meine Benutzer mit meiner Factory erstellen, die gerade funktioniert, und dann nur Geschäftsdetails erstellen, bei denen der Diskriminator auf ein Geschäftskonto verweist.

Ich habe drei Möglichkeiten im Kopf:

  1. Erstellen Sie aus der Factory des Benutzers und verwenden Sie dann '- & gt; each ()', um den Diskriminator zu überprüfen und einen neuen Geschäftsbenutzer mit der Factory zu erstellen. Ich kann jedoch die user_id , der der Benutzer zugewiesen wurde, nicht an die Geschäftsfactory übergeben.
  2. Erstellen Sie zuerst die Benutzer. Dann rufen Sie in meinem Business-Seeder alle Benutzer ab, die mit einem Businessdiskriminator übereinstimmen. Dann führen Sie für alle diese Benutzer eine Factory aus, die die Geschäftsdetails erstellt. Aber noch einmal, ich müsste irgendwie den user_id des bereits erstellten Benutzers mit der Geschäftsfactory user_id verknüpfen.
  3. Erstellen Sie in meiner Geschäftsfactory einen neuen Benutzer und rufen Sie die ID ab, wodurch die Verbindung zwischen users.user_id und business.user_id hergestellt wird. Allerdings verwende ich einen Zufallsgenerator für user.user_type . Selbst wenn ich die Tabelle businesses gefüllt habe, könnte es für Benutzer sein, die den Diskriminator als 'persönlich' haben.

Gibt es einen anderen Weg? Kann ich Argumente von meinem Seeder an die Fabrik weitergeben?

    
Cristian 03.09.2015, 14:19
quelle

1 Antwort

31

Die Attribute, die Sie an die Funktion create übergeben, werden als zweites Argument in Ihren Modelldefinitions-Callback übernommen.

In Ihrem Fall müssen Sie nicht einmal auf diese Attribute zugreifen, da sie automatisch zusammengeführt werden:

%Vor%

Passen Sie dies Ihren Bedürfnissen an.

    
Joseph Silber 03.09.2015, 14:42
quelle