Guardar múltiples registros en una creación elocuente de laravel

4 minutos de lectura

Avatar de usuario de Geoff
Geoff

Estoy tratando de guardar varios registros a través de

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

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

Pero a partir de lo anterior, solo se crea la primera matriz. ¿Dónde me estoy equivocando? Cualquier ayuda es apreciada.

Avatar de usuario de Wreigh
Wreigh

Creo que esto debería hacer

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

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

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

Asegúrate de estar pasando un matriz de matricesNo un parámetros de matriz.

ACTUALIZAR, puedes usar Model::insert() aunque según lo que he leído, ese método no crea/actualiza las marcas de tiempo.

  • Esta respuesta fue para una versión anterior de Laravel, desafortunadamente, ya no estoy actualizado y no estoy seguro de cómo se debe hacer esto en la última versión principal. Apreciaría si alguien realmente actualizara esto, aunque eso agrega algún valor.

    – Wreigh

    3 de noviembre de 2020 a las 1:10

  • Llamada al método no definido App\Models\Post::createMany() , Versión 8 de laravel

    –Waled Khaled

    19/09/2021 a las 18:40


  • Model::insert() funciona en Laravel 7

    – usuario3613026

    6 oct 2021 a las 13:57

Avatar de usuario de Ganesh Ghalame
Ganesh Ghalame

Puedes simplemente usar Eloquent::insert() Enlace como a continuación:

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

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

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

El problema con lo anterior es que no actualizará las marcas de tiempo, encuentre ejemplos aquí

  • Nota: Model::insert() no almacena created_at y updated_atpor lo que debe agregarlos usted mismo si es necesario.

    – Hasan Alyazidi

    20 de enero a las 10:41

Avatar de usuario de Ruberandinda Patience
Ruberandinda Paciencia

El método Crear muchos createMany está disponible en referencia de verificación de relación a este enlace y este documentación de laravel

hasta ahora mi ejemplo se ve así.

tengo dos modelos Pricing y AvailableService Modelo

Modelo de precios

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");
    }
}

Y el AvailableServiceMode se parece a esto

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");
    }
}

Asi que createMany la operación se ve así

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

Y funciona, tú también puedes intentarlo. GRACIAS

Si desea almacenar varios registros en la sembradora, use este método en lugar de insert porque en mi caso quiero slug creado automáticamente usando spatie/laravel-sluggable paquete Si usaste el insert o DB técnica entonces tienes que dar el valor para slug campo también.

CategoríaSembradora

<?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); });
    }
}

avatar de usuario de justnajm
justnajm

En caso de que alguien busque un modelo elocuente, utilicé el siguiente método:

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(); es obligatorio, de lo contrario, solo guarda un registro único cuando $this se usa

avatar de usuario de nurzzzone
nurzzzone

en seeder crea una matriz y haz foreach con Model::create(). Todos sus registros estarán con marcas de tiempo


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

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

¿Ha sido útil esta solución?