kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 phoenixwizard
phoenixwizard
Вопрос

Массовая вставка в Laravel с помощью eloquent ORM

Как выполнить массовые вставки в базу данных в Laravel с помощью Eloquent ORM?

Я хочу сделать это в Laravel: https://stackoverflow.com/a/10615821/600516. но получаю следующую ошибку.

SQLSTATE[HY093]: Недопустимый номер параметра: смешанные именованные и позиционные параметры.

134 2012-10-03T06:16:16+00:00 10
 Community
Community
Редактировал вопрос 23-го мая 2017 в 12:10
Программирование
database
php
laravel
eloquent
Решение / Ответ
 GTF
GTF
27-го ноября 2012 в 11:54
2012-11-27T23:54:16+00:00
Дополнительно
Источник
Редактировать
#17359296

Вы можете просто использовать Eloquent::insert().

Например:

$data = array(
    array('name'=>'Coder 1', 'rep'=>'4096'),
    array('name'=>'Coder 2', 'rep'=>'2048'),
    //...
);

Coder::insert($data);
268
0
Eslam  Salem Mahmoud
Eslam Salem Mahmoud
26-го октября 2014 в 5:01
2014-10-26T05:01:21+00:00
Дополнительно
Источник
Редактировать
#17359297

Мы можем легко обновить ответ GTF для обновления временных меток

$data = array(
    array(
        'name'=>'Coder 1', 'rep'=>'4096',
        'created_at'=>date('Y-m-d H:i:s'),
        'modified_at'=> date('Y-m-d H:i:s')
       ),
    array(
         'name'=>'Coder 2', 'rep'=>'2048',
         'created_at'=>date('Y-m-d H:i:s'),
         'modified_at'=> date('Y-m-d H:i:s')
       ),
    //...
);

Coder::insert($data);

Обновление: для упрощения даты мы можем использовать углерод, как предложил @Pedro Moreira

$now = Carbon::now('utc')->toDateTimeString();
$data = array(
    array(
        'name'=>'Coder 1', 'rep'=>'4096',
        'created_at'=> $now,
        'modified_at'=> $now
       ),
    array(
         'name'=>'Coder 2', 'rep'=>'2048',
         'created_at'=> $now,
         'modified_at'=> $now
       ),
    //...
);

Coder::insert($data);

UPDATE2: для laravel 5 используйте updated_at вместо modified_at.

$now = Carbon::now('utc')->toDateTimeString();
$data = array(
    array(
        'name'=>'Coder 1', 'rep'=>'4096',
        'created_at'=> $now,
        'updated_at'=> $now
       ),
    array(
         'name'=>'Coder 2', 'rep'=>'2048',
         'created_at'=> $now,
         'updated_at'=> $now
       ),
    //...
);

Coder::insert($data);
 Banana
Banana
Редактировал ответ 6-го апреля 2017 в 6:05
67
0
 Alex
Alex
25-го января 2017 в 7:18
2017-01-25T19:18:26+00:00
Дополнительно
Источник
Редактировать
#17359300

Для того, кто читает это, проверьте createMany() метод.

/**
 * Create a Collection of new instances of the related model.
 *
 * @param  array  $records
 * @return \Illuminate\Database\Eloquent\Collection
 */
public function createMany(array $records)
{
    $instances = $this->related->newCollection();

    foreach ($records as $record) {
        $instances->push($this->create($record));
    }

    return $instances;
}
Emile Bergeron
Emile Bergeron
Редактировал ответ 11-го октября 2017 в 8:42
27
0
imal  hasaranga perera
imal hasaranga perera
4-го июня 2017 в 12:12
2017-06-04T12:12:59+00:00
Дополнительно
Источник
Редактировать
#17359302

Это, как вы делаете это в более красноречивый способ,

    $allintests = [];
    foreach($intersts as $item){ //$intersts array contains input data
        $intestcat = new User_Category();
        $intestcat->memberid = $item->memberid;
        $intestcat->catid= $item->catid;
        $allintests[] = $intestcat->attributesToArray();
    }
    User_Category::insert($allintests);
17
0
 srmilon
srmilon
23-го декабря 2017 в 7:28
2017-12-23T19:28:18+00:00
Дополнительно
Источник
Редактировать
#17359304

Я искал много раз его, наконец, использовать пользовательские метки, как показано ниже:

$now = Carbon::now()->toDateTimeString();
Model::insert([
    ['name'=>'Foo', 'created_at'=>$now, 'updated_at'=>$now],
    ['name'=>'Bar', 'created_at'=>$now, 'updated_at'=>$now],
    ['name'=>'Baz', 'created_at'=>$now, 'updated_at'=>$now],
    ..................................
]);
3
0
 sumit
sumit
16-го февраля 2019 в 3:16
2019-02-16T03:16:14+00:00
Дополнительно
Источник
Редактировать
#17359306

`Красноречивый::вставить-это правильное решение, но он не будет обновлять метки времени, так что вы можете сделать что-то вроде ниже

 $json_array=array_map(function ($a) { 
                        return array_merge($a,['created_at'=> 
                                            Carbon::now(),'updated_at'=> Carbon::now()]
                                           ); 
                                     }, $json_array); 
 Model::insert($json_array);

Идея в том, чтобы добавить created_at и updated_at на весь массив, прежде чем делать вставки

 sumit
sumit
Редактировал ответ 18-го февраля 2019 в 10:39
1
0
 justnajm
justnajm
16-го июня 2019 в 9:00
2019-06-16T09:00:48+00:00
Дополнительно
Источник
Редактировать
#17359308

Для категории вставки отношений я сталкивался с той же проблемой и понятия не имел, за исключением того, что в моей емкой модели я использовал self() на экземпляр того же класса в foreach, чтобы записать несколько сейвов и карточка удостоверения личности.

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 = новый собственн()" это только сохраняет одну запись (когда $obj-файлы составила $это)

0
0
Francisco Daniel
Francisco Daniel
21-го сентября 2017 в 11:28
2017-09-21T23:28:23+00:00
Дополнительно
Источник
Редактировать
#17359303

Может еще что Laravel способ решить эту проблему состоит в использовании сборника и цикла вставка с моделью воспользовавшись метки.

<?php

use App\Continent;
use Illuminate\Database\Seeder;

class InitialSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        collect([
            ['name' => 'América'],
            ['name' => 'África'],
            ['name' => 'Europa'],
            ['name' => 'Asia'],
            ['name' => 'Oceanía'],
        ])->each(function ($item, $key) {
            Continent::forceCreate($item);
        });
    }
}

Редактировать:

Извините за мое недопонимание. Для массовой вставки это может помочь и, возможно, при этом вы можете сделать хорошие сеялки и оптимизировать их немного.

<?php

use App\Continent;
use Carbon\Carbon;
use Illuminate\Database\Seeder;

class InitialSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $timestamp = Carbon::now();
        $password = bcrypt('secret');

        $continents = [
            [
                'name' => 'América'
                'password' => $password,
                'created_at' => $timestamp,
                'updated_at' => $timestamp,
            ],
            [
                'name' => 'África'
                'password' => $password,
                'created_at' => $timestamp,
                'updated_at' => $timestamp,
            ],
            [
                'name' => 'Europa'
                'password' => $password,
                'created_at' => $timestamp,
                'updated_at' => $timestamp,
            ],
            [
                'name' => 'Asia'
                'password' => $password,
                'created_at' => $timestamp,
                'updated_at' => $timestamp,
            ],
            [
                'name' => 'Oceanía'
                'password' => $password,
                'created_at' => $timestamp,
                'updated_at' => $timestamp,
            ],
        ];

        Continent::insert($continents);
    }
}
Francisco Daniel
Francisco Daniel
Редактировал ответ 18-го октября 2017 в 3:40
-1
0
Nikunj K.
Nikunj K.
27-го августа 2016 в 9:32
2016-08-27T09:32:42+00:00
Дополнительно
Источник
Редактировать
#17359299
$start_date = date('Y-m-d h:m:s');        
        $end_date = date('Y-m-d h:m:s', strtotime($start_date . "+".$userSubscription['duration']." months") );
        $user_subscription_array = array(
          array(
            'user_id' => $request->input('user_id'),
            'user_subscription_plan_id' => $request->input('subscription_plan_id'),
            'name' => $userSubscription['name'],
            'description' => $userSubscription['description'],
            'duration' => $userSubscription['duration'],
            'start_datetime' => $start_date,
            'end_datetime' => $end_date,
            'amount' => $userSubscription['amount'],
            'invoice_id' => '',
            'transection_datetime' => '',
            'created_by' => '1',
            'status_id' => '1', ),
array(
            'user_id' => $request->input('user_id'),
            'user_subscription_plan_id' => $request->input('subscription_plan_id'),
            'name' => $userSubscription['name'],
            'description' => $userSubscription['description'],
            'duration' => $userSubscription['duration'],
            'start_datetime' => $start_date,
            'end_datetime' => $end_date,
            'amount' => $userSubscription['amount'],
            'invoice_id' => '',
            'transection_datetime' => '',
            'created_by' => '1',
            'status_id' => '1', )
        );
        dd(UserSubscription::insert($user_subscription_array));

UserSubscription - это имя моей модели. Это вернет "true" при успешной вставке, иначе "false".

-1
0
Alexandre Possebon
Alexandre Possebon
14-го июня 2019 в 5:43
2019-06-14T17:43:52+00:00
Дополнительно
Источник
Редактировать
#17359307

РЕШЕНА ПРОБЛЕМА ............. ALTER ТАБЛИЦЫ ДЛЯ ПЕРЕНОСА...

$table->timestamp('created_at')->nullable()->useCurrent();

Легко

Schema::create('spider_news', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('source')->nullable();
            $table->string('title')->nullable();
            $table->string('description')->nullable();
            $table->string('daterss')->nullable();

            $table->timestamp('created_at')->nullable()->useCurrent();
            $table->timestamp('update_at')->nullable()->useCurrent();
        });
-4
0
Похожие сообщества 35
phpGeeks
phpGeeks
4 757 пользователей
Best PHP chat @phpGeeksJunior - новичкам @golangGeeks - гошка @jobGeeks - вакансии(250000 р/мес) @dbGeeks - базы данных @ebanoePhp - канал о PHP @laravel_pro - Laravel @jsChat - JS @moscowProgers - Москва Реклама: https://vk.cc/cbJtVV ДР - 28.03.2016
Открыть telegram
Laravel Pro
Laravel Pro
4 638 пользователей
Официальный чат для всех Laravel программистов . Одобрен Тэйлором ☝🏻 Правила: https://bit.ly/2SGWs7h Реклама: https://vk.cc/cbJtVV Новичкам: @phpGeeksJunior Вакансии: @fordev @jobgeeks
Открыть telegram
PHP — вакансии, поиск работы и аналитика
PHP — вакансии, поиск работы и аналитика
4 157 пользователей
Публикуем вакансии и запросы на поиск работы по направлению PHP, Laravel, Symfony, Yii etc. Full/par-time, remote и т.д. ПРАВИЛА: https://t.me/php_jobs/45345 Флудильня: @phpimhorus More: @javascript_jobs, @nodejs_jobs, @devops_jobs, @sql_jobs
Открыть telegram
DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
3 542 пользователей
Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.
Открыть telegram
Laravel для начинающих
Laravel для начинающих
3 473 пользователей
Чат для программистов, изучающих PHP-фреймворк Laravel. Правила чата: https://t.me/laravel_web/188295 За мат и флуд - мут/бан.
Открыть telegram
phpGeeksJunior
phpGeeksJunior
2 980 пользователей
Группа для новичков. Не стесняйтесь задавать вопросы по php. Не флудить!!!! Реклама: https://vk.cc/cbJtVV Правила и полезные ссылки https://github.com/phpgeeks-club/faq Бест от пхпгикс https://t.me/best_of_phpgeeks
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Денис Васьков
Зарегистрирован 17 часов назад
2
Dima Patrushev
Зарегистрирован 2 дня назад
3
sirojidddin otaboyev
Зарегистрирован 1 неделю назад
4
Елена Гайдамамакинат
Зарегистрирован 1 неделю назад
5
Иван Степанюк
Зарегистрирован 1 неделю назад
DE
ES
ID
JA
KO
RO
RU
TR
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией