Heim  >  Fragen und Antworten  >  Hauptteil

So passen Sie die Anzahl der in Sequence erstellten Objekte an (Laravel 8)

<p>Ich versuche, 30 Nachrichten mit Seeder und Factory zu erstellen. Aber ich muss 10 Nachrichten mit einem Feldwert ungleich Null <code>published_at</code>(Carbon) und andere Nachrichten mit einem Zufallswert (Carbon/NULL) erstellen. </p> <p>In der Dokumentation habe ich ein Beispiel dafür gesehen, das 5 Datensätze mit dem Wert <code>admin (Y)</code> und weitere 5 Datensätze mit dem Wert <code>(N) erstellt hat )</code>. </p> <pre class="brush:php;toolbar:false;">User::factory() ->Anzahl(10) ->state(neue Sequenz( ['admin' => 'Y'], ['admin' => 'N'], )) ->create();</pre> <p>Bisher verwende ich diesen Code, kann aber nicht herausfinden, wie ich die Anzahl der Datensätze mit einem bestimmten Parameterwert <code>published_at</code> hinzufügen kann. Verwenden Sie beispielsweise Carbon für 10 Elemente und NULL für 20 Elemente. </p> <pre class="brush:php;toolbar:false;">/**ArtikelSeeder*/ Artikel::factory() ->Anzahl(30) ->state(neue Sequenz([ 'published_at' => Factory::create()->dateTimeBetween( now()->startOfMonth(), now()->endOfMonth() ), ])) ->create();</pre></p>
P粉043566314P粉043566314384 Tage vor468

Antworte allen(1)Ich werde antworten

  • P粉957723124

    P粉9577231242023-09-05 00:50:01

    在序列闭包中,您可以访问$index属性,该属性包含迄今为止通过序列进行的迭代次数。

    以下是您可以使用的最简单的逻辑来实现您想要的结果。

    Article::factory()
    ->count(30)
    ->sequence(fn ($sequence) => [
        'published_at' => $sequence->index < 10
                          ?  Factory::create()->dateTimeBetween(
                                 now()->startOfMonth(),
                                 now()->endOfMonth()
                             );
                          : null
    ])
    ->create();

    Antwort
    0
  • StornierenAntwort