Speichern mehrerer Datensätze in einem eloquenten Laravel-Create

Lesezeit: 4 Minuten

Benutzeravatar von Geoff
Geoff

Ich versuche, mehrere Datensätze über zu speichern

AppSettings::create(
    [
        'name' => 'mail_host',
        'type' => $emailsettingstype->id,
        'value' => '',

    ],
    [
        'name' => 'mail_port',
        'type' => $emailsettingstype->id,
        'value' => '',    
    ],
    [
        'name' => 'mail_username',
        'type' => $emailsettingstype->id,
        'value' => '',
    ],
);

Aber von oben wird nur das erste Array erstellt. Wo gehe ich falsch? Jede Hilfe ist willkommen.

Wreighs Benutzeravatar
Kranz

Ich denke, das sollte reichen

AppSettings::createMany([
    [
        'name'=>'mail_host',
        'type'=>$emailsettingstype->id,
        'value'=>'',

    ],
    [
        'name'=>'mail_port',
        'type'=>$emailsettingstype->id,
        'value'=>'',

    ],
    [
        'name'=>'mail_username',
        'type'=>$emailsettingstype->id,
        'value'=>'',
    ],
]);

Stellen Sie sicher, dass Sie an übergeben Array von Arrayskein Parameter des Arrays.

UPDATE, können Sie verwenden Model::insert() obwohl nach dem, was ich gelesen habe, diese Methode die Zeitstempel nicht erstellt/aktualisiert.

  • Diese Antwort war für eine frühere Version von Laravel, leider bin ich nicht mehr auf dem neuesten Stand und nicht sicher, wie dies in der neuesten Hauptversion geschehen soll. Ich würde mich freuen, wenn jemand dies tatsächlich aktualisieren würde, wenn dies jedoch einen Mehrwert bringt.

    – Wiegen

    3. November 2020 um 1:10 Uhr

  • Aufruf der undefinierten Methode App\Models\Post::createMany() , Version 8 von Laravel

    – Waleed Khaled

    19. September 2021 um 18:40 Uhr


  • Model::insert() funktioniert auf Laravel 7

    – Benutzer3613026

    6. Oktober 2021 um 13:57 Uhr

  • laravel.com/docs/9.x/eloquent-relationships#the-create-method Dieser Ratschlag funktioniert nicht für Version 9 oder eine frühere Laravel-Version. Laut der offiziellen Laravel-Dokumentation erstellt die Methode createMany() “mehrere verwandte Modelle”, was bedeutet, dass sie nur mit verwandten Modellen funktioniert, nicht direkt mit dem Modell, wie oben beschrieben.

    – Azurkorn

    9. Dezember 2022 um 1:07 Uhr

Benutzeravatar von Ganesh Ghalame
Ganesh Ghalame

Sie können einfach Eloquent::insert() verwenden Verknüpfung wie nachstehend:

AppSettings::insert([
    [
        'name'=>'mail_host',
        'type'=>$emailsettingstype->id,
        'value'=>'',

    ],
    [
        'name'=>'mail_port',
        'type'=>$emailsettingstype->id,
        'value'=>'',

    ],
    [
        'name'=>'mail_username',
        'type'=>$emailsettingstype->id,
        'value'=>'',
    ],
]);

Das Problem mit oben ist, dass Zeitstempel nicht aktualisiert werden, Beispiele finden Sie hier

  • Notiz: Model::insert() speichert nicht created_at und updated_atalso sollten Sie sie bei Bedarf selbst hinzufügen.

    – Hasan Alyazidi

    20. Januar 2022 um 10:41 Uhr

Benutzeravatar von Ruberandinda Patience
Ruberandinda Geduld

Die Create-Many-Methode createMany ist auf Beziehungsprüfungsreferenz zu diesem Link und diesem verfügbar Dokumentation von laravel

Bisher sieht mein Beispiel so aus.

Ich habe zwei Modelle Pricing und AvailableService Modell

Preismodell

namespace App;
use Illuminate\Database\Eloquent\Model;
class Pricing extends Model
{
    protected $fillable = ["name", "price"];
    public function available(){
        return $this->hasMany(AvailableService::class, "pricing_id", "id");
    }
}

Und der AvailableServiceMode sieht aus wie das

namespace App;
use Illuminate\Database\Eloquent\Model;
class AvailableService extends Model
{
    protected $fillable = ["pricing_id", "service_id"];
    public function service(){
        return $this->belongsTo(Service::class, "service_id", "id");
    }
}

So createMany Betrieb sieht so aus

$insertMany = Pricing::create(['name'=>request('name')]);
$insertMany->available()->createMany([
      ['service_id'=>1],
      ['service_id'=>2],
      ['service_id'=>3],
      ['service_id'=>4],
      ['service_id'=>5],
]);

Und es funktioniert, Sie können es auch versuchen. DANKE

  • Erstellen Sie viele Werke, aber es werden immer noch zu viele SQL-Abfragen ausgeführt. Gibt es so etwas wie Insert für Relationen?

    – Puschkraj Jori

    23. Dezember 2022 um 16:12 Uhr

Wenn Sie mehrere Datensätze im Seeder speichern möchten, verwenden Sie stattdessen diese Methode insert weil ich in meinem Fall automatisch erstellte Slugs verwenden möchte spatie/laravel-sluggable pkg. Wenn Sie die verwendet haben insert oder DB Technik dann müssen Sie den Wert für angeben slug Feld auch.

KategorieSeeder

<?php

namespace Database\Seeders;

use App\Servcategory;
use Illuminate\Database\Seeder;

class CategorySeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $categories = [
            [
                'name' => 'Automotive',
                // 'slug' => 'automotive',
            ],
            [
                'name' => 'Business Services',
                // 'slug' => 'business-services',
            ],
            [
                'name' => 'Computer, Telecom & IT Services',
                // 'slug' => 'computer-telecom-&-it-services',
            ],
            [
                'name' => 'Education & Training',
                // 'slug' => 'education-&-training',
            ],
            [
                'name' => 'Finance',
                // 'slug' => 'finance',
            ],
            [
                'name' => 'Hospitals, Clinic, Medical',
                // 'slug' => 'hospitals-clinic-medical',
            ],
            [
                'name' => 'Real Estate, Construction, Property',
                // 'slug' => 'real-estate-construction-property',
            ],
            [
                'name' => 'Travel,Toursim & Hotels',
                // 'slug' => 'travel-toursim-&-hotels',
            ],
        ];

        // Servcategory::insert($categories);
        collect($categories)->each(function ($category) { Servcategory::create($category); });
    }
}

Benutzeravatar von justnajm
geradenajm

Falls jemand nach einem eloquenten Modell sucht, habe ich die folgende Methode verwendet:

foreach($arCategories as $v)
{                
    if($v>0){
        $obj = new Self(); // this is to have new instance of own
        $obj->page_id = $page_id;
        $obj->category_id = $v;
        $obj->save();
    }
}

$obj = new Self(); ist ein Muss, sonst speichert es nur einen einzigen Datensatz, wenn $this wird genutzt.

Benutzeravatar von nurzzzone
nurzzzone

Erstellen Sie im Seeder ein Array und führen Sie foreach mit Model::create() aus. Alle Ihre Aufzeichnungen werden mit Zeitstempeln versehen


protected $array = [
    [...],
    [...],
    [...]
];

public function run()
{
    foreach ($this->array as $value) {
        Model::create($value);
    }
}

1440310cookie-checkSpeichern mehrerer Datensätze in einem eloquenten Laravel-Create

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy